2016-05-26 3 views
0

現在のオブジェクトをnullに設定するにはどうすればよいですか?現在のオブジェクトをnullに設定します

function ZPNode(){}; //Constructor 
function _destroy(){ 
    //this = null; --> Won't work obviously 
} 
ZPNode.prototype.remove = function(){ 
    //Remove node 
    _destroy.call(this); 
}; 

編集:おそらく説明が明確ではありませんでした。何が起こるべきかは次のようなものです:

var tree = ZPTree.create(jsonArr); 
var node = tree.findNode(1); 
node.remove(); 
console.log(node); //null 

理由は簡単です。誤って次のようなことをする必要はありません。

node.remove(); 
node.appendChild(anotherNode); //Oops 

可能な解決策は、他の方法がない場合はオブジェクトの状態で作業することです。

編集2:より多くの研究の後、私はそれが全体的に可能であるとは思わない。私は躊躇せずに解決策の解決策をとるでしょう。私は次のようなことをすることができます:

tree.removeNode(node); 

私の意見では、きれいに見えますが。

+2

私は[この回答]を見てみるべきだと思います(http://stackoverflow.com/questions/2304860/can-an-object-automatically-delete-itself-in-javascript-once-it-has-達成しました) –

+0

しかし、オブジェクト自体は削除されません。あなたの関数 'remove'は効果がありません – RomanPerekhrest

+0

なぜあなたはそうしたいのですか? – Rayon

答えて

2

JavaScriptは自動的にガベージコレクションされます。ガベージコレクタが実行を決定し、そのオブジェクトがそれに適格である場合にのみ、オブジェクトのメモリは再利用されます。 _destroyの中にこのを削除する必要はありません。すべての参照を削除するだけです。

function ZPNode(){}; //Constructor 
function _destroy(){ 
    //this = null; --> Won't work obviously 
} 
ZPNode.prototype.remove = function(){ 
    //Remove node 
    _destroy.call(this); 
}; 

これを実現するには、オブジェクトインスタンスを無効にするオプションがありますが、別の参照がまだそのオブジェクトを参照していることを保証するものではありません。

var obj = new ZPNode(); 
obj = null; 
+0

それはもっとapiの質問です。ユーザーがnode.remove()を呼び出したとき。 (現在のノードをツリーから削除する必要があります)、インスタンスはnullに設定されていなければなりません。私は彼らがnode = node.remove(); – Trace

+0

実装あなたが \t \tがthis.elementを削除\t参照が他のオブジェクトへの参照を削除することができます//ここで 関数_destroy(){ \tを破壊する例。 \t // DOMから要素を削除します\t \t \t this.elementNodeReferenceremove(); \t \t //グローバル参照を削除する \t delete window.ZPNodeTree; // window.ZPNodeTree = null; \t } –

+0

あなたのご意見ありがとうございます – Trace

0

最終的に、私は特定のユースケースに対して最も論理的な解決策を見つけました。
実際にはもはや木に接続されていないため、ノードが、存在し続けていることは問題ではない0

this._treeId = 0; 

に現在のツリーへの参照を設定することほど単純でした。
さらに、ツリーにまだ接続されている別のノードに後で再追加される可能性があるため、ノードを存在させたままにしておくことは理にかなっています。

ありがとうございました。

関連する問題