2017-04-13 16 views
-1

現在の再帰に問題があります。私がthis.membとthis.childを記録するとき、それらの2つは同じ値です。しかし、それは事実ではない。理論的に言えば、this.childはthis.membの子でなければなりません。Javascript:forループによる再帰

buildGraphNode(treeNode){ 
    if(!(treeNode.data instanceof Array)){ 
     this.memb = this.member("" + treeNode.label, "" + treeNode.label, 'images/user1.png', '#d0000c', '', 'B'); 
     this.members.push(this.memb); 
    } 
    for (var i = 0; i<treeNode.children.length; i++) { 
     this.child = this.buildGraphNode(treeNode.children[i]); 

     if(this.child != null && this.memb !=null){ 
     console.log(this.memb); 
     console.log(this.child); 
     this.connections.push(this.link(this.memb,this.child)); 
     } 
    } 
    return this.memb; 
} 

答えて

0

"this"に対して過度の参照を使用しています。同じthisオブジェクト上で操作しています。これにより、外部コンテキストが変更されます。代わりに、ローカル変数を使用してみてください:

buildGraphNode(treeNode){ 
    if(!(treeNode.data instanceof Array)){ 
     var memb = this.member("" + treeNode.label, "" + treeNode.label, 'images/user1.png', '#d0000c', '', 'B'); 
     this.members.push(memb); 
    } 
    for (var i = 0; i<treeNode.children.length; i++) { 
     var child = this.buildGraphNode(treeNode.children[i]); 

     if(child != null && memb !=null){ 
     console.log(memb); 
     console.log(child); 
     this.connections.push(link(memb,child)); 
     } 
    } 
    return memb; 
} 

私はあなたがコードを構成しているか分からないので、thisの他の発生を変更するには、いくつかのニーズがあるかもしれません。

+0

グローバル変数を作成する 'var'、' const'、 'let'がなければ! – Sylwester

+0

これです。すべてのグローバル変数です。 (Angular2コンポーネントです) – Dino

+0

これらの変数を関数内に作成するとします。 1つの変数が常に設定解除されるので、if(child!= null)&& memb!= null)を渡しません。 – Dino

関連する問題