2011-07-22 6 views
1
var obj = { 
    destroy: function(){this = null;} 
}; 

obj.destroy(); 

これはChromeで動作しますが、何らかの理由でFirefoxがこのエラーを参照しています。方法の中でこのオブジェクトを殺す良い方法はありますか?Javascriptクロスブラウザーでオブジェクトを削除する方法

エラー:

invalid assignment left-hand side 
[Break On This Error] destroy: function(){this = null;} 
+0

エラーは何ですか? –

+0

無効な代入の左側 [Break On This Error] destroy:function(){this = null;} – Fostah

+0

オブジェクトをデストラクタでカプセル化する利点は何ですか? obj.destroy()はobj = nullよりも優れていますか? – Tim

答えて

3

クロムがそれを可能にしていますが、これに値を代入することはできませんなぜわかりません。これを参照することはできますが、値を割り当てることはできません。

実行したい配列の破壊がある場合は、destroyメソッド内でthis.myArrayNameを参照して解放しようとしているものを解放しますが、nullを割り当ててインスタンスを破棄することはできません。

私はあなたがこのような何かを試みることができると仮定します。あなたが合法的に「この」...

コーディングハッピーを無効化するために得ることができるよう、かなりの近く

var foo = { 
    // will nullify all properties/methods of foo on dispose 
    dispose: function() { for (var key in this) this[key] = null; } 
} 

foo.dispose(); 

を。

B

2

私を呼び出して、古いファッション、しかし:

foo = null; 
+0

'foo = undefined'はもっと適切でしょうか?私は確信していませんが、マップから完全に離れたものを望むなら、私にはもっと意味があります。 –

+0

@CamiloMartinは未定義で、JavaScriptでは若干異なるものがあります。 Undefinedは、変数が設定されていないことを意味します: 'var a;'。 'null'は変数が多かれ少なかれ空であることを意味します。しかし、実際には違いは軽微です。 – Joe

+1

はい、そういうわけで、変数を 'undefined 'に設定するのは、削除に最も近いものです。なぜなら、' delete'キーワードのように動作するからです。 –

0

は、私はあなたがこれを困難にしている理由はわかりません。 Javascriptはガベージコレクション言語です。何かが解放されるのを許すためにあなたがしなければならないことは、どこにも参照がないことを確認することです。あなたがで始まる場合

ので、:

obj = null; 

var obj = { 
    data: "foo"; 
}; 

、今あなたが「自由」RIDまたはそのオブジェクトを取得したい、すべてあなたがしなければならないと、それへの参照が明確です

最初に定義してobjに割り当てたデータ構造への参照がコード内に存在しないため、ガベージコレクタは解放します。

オブジェクトは自分自身を破壊することはできません(他のオブジェクトが参照を持つ可能性があるため)。すべての参照を削除することで解放されます。オブジェクトは他のものへの自身の参照をクリアすることができますが、一般的には必要ではありませんが、オブジェクト自体への参照をすべて削除すると保持する参照も処理されるため、JSとDOMの循環参照のバグは例外です特定の古いブラウザ - 特定のIEで)。

削除したいオブジェクトにプロパティを持っている場合は、明示的に「削除」する場合があります。だから、あなたが持っている場合:

var obj = { 
    data: "foo", 
    count: 4 
}; 

そして、あなたは、あなたがこれでそれを行うことができ、「データ」プロパティを削除したい:プロパティ/キーは変数を経由して、プログラムに割り当てられた場合の

delete obj.data; 

このように:

delete obj[key]; 

var key = "xxx"; 
obj[key] = "foo"; 

あなたがそのキーを削除することができます

関連する問題