29

次のように作成されたクラスがあります。

function T() {
    this.run = function() {
        if (typeof this.i === 'undefined')
            this.i = 0;
        if (this.i > 10) {
            // Destroy this instance
        }
        else {
            var t = this;
            this.i++;
            setTimeout( function() {
                t.run();
            }, 1000);
        }
    }
}

次に、次のように初期化しますvar x = new T();

10回の繰り返しに達した場合、このインスタンスをそれ自体から一度破棄する方法がわかりません。

また、10になる前に止めたい場合に備えて、外部から破壊する方法もわかりません。

4

2 に答える 2

39

インスタンスを削除するには、JavaScript でそのインスタンスを指すすべての参照を削除して、ガベージ コレクターがインスタンスを再利用できるようにします。

これは、それらの参照を保持している変数を知っている必要があることを意味します。

変数に割り当てただけの場合はx、そうすることができます

x = null;

また

x = undefined;

また

delete window.x;

しかし、イアンによって正確に説明されているように、最後のものは、 x を の明示的なプロパティとして定義した場合にのみ機能しますwindow

于 2013-06-21T20:08:29.590 に答える
3

クラスは同じではなく、機能が異なります。削除は機能しません。クラスはシステム改造です。

class SAFunc {
  method1(){
    console.log("1");
  }
  method2(){
    console.log("2");
  }
}
let func  = new SAFunc();
func['method2']()

試す:

  • delete window['func']- うまくいかない
  • delete eval['func']- うまくいかない
  • delete window['SAFunc']- うまくいかない
  • ...
  • ...

機能- コマンド作業削除

method1 = function(){
  console.log("func1");
}
function method2() {
  console.log("func2");
}
var SAFunc = { method3: function() { console.log("func3"); } }

あなたのテストを行います...試してください:

  • delete window['method1']
  • delete window['method2']
  • delete SAFunc['method3']

楽しい!私はプログラミングが大好きです

よろしくお願いします;)

于 2016-06-03T14:15:45.510 に答える