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 に答える