2

我在原型对象中有以下函数:

EmptyChild:function(node)
{

     if (Array.isArray(node.children)) {
        node.children = node.children.filter(
            function(child) {
                if (child['id'] =="" || child.length) {
                    return false;
                } else {
                    this.EmptyChild(child);
                    return true;
                }
            }
        );
    }
}   

但我收到以下错误:

   Uncaught TypeError: Object [object global] has no method 'EmptyChild' 

我该如何解决这个问题?

4

1 回答 1

3

this是回调中的全局对象。您需要将其保存在变量中或将其传递给filter.

请参阅文档

如果为过滤器提供了 thisObject 参数,它将被用作回调的每次调用的 this。如果未提供或为 null,则使用与回调关联的全局对象。

所以你的代码可以是:

   if (Array.isArray(node.children)) {
        node.children = node.children.filter(
            function(child) {
                if (child['id'] =="" || child.length) {
                    return false;
                } else {
                    this.EmptyChild(child);
                    return true;
                }
            }
        , this); // <===== pass this
    }
于 2013-03-17T10:26:30.020 回答