1
var obj = {
    destroy: function(){this = null;}
};

obj.destroy();

これはChromeで機能しますが、Firefoxは何らかの理由でこれを参照してエラーをスローしています。メソッド内でこのオブジェクトを強制終了するためのより良い方法はありますか?

エラー:

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

3 に答える 3

3

Chromeで許可されている理由はわかりませんが、これに値を割り当てることはできません。これを参照することはできますが、値を割り当てることはできません。

実行したい配列破棄がある場合は、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

于 2011-07-22T18:34:53.170 に答える
2

私を昔ながらと呼んでください、しかし:

foo = null;
于 2011-07-22T18:37:04.960 に答える
0

なぜこれを難しくしているのかわかりません。Javascriptはガベージコレクションされた言語です。何かを解放できるようにするためにあなたがしなければならないのは、どこにもそれへの参照がもうないことを確認することです。

したがって、次のように開始する場合:

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

そして今、あなたはそのオブジェクトを取り除くか「解放」したいので、あなたがしなければならないのはそれへの参照をクリアすることだけです:

obj = null;

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

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

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

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

そして、あなたは「データ」プロパティを削除したいです、あなたはこれでそれをすることができます:

delete obj.data;

プロパティ/キーが次のような変数を介してプログラムで割り当てられた場合の例:

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

次の方法でそのキーを削除できます。

delete obj[key];
于 2011-07-22T19:30:37.987 に答える