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;

但是最后一个,正如 Ian 所说,只有在您将 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 回答