回调中的原型递归函数

时间:2013-03-17 10:24:36

标签: javascript prototypejs

我在原型对象中有以下功能:

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' 

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

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

请参阅documentation

  

如果提供thisObject参数进行过滤,则将其用作   每次调用回调时都会这样。如果没有提供,   或者为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
    }