试图破坏它后,“类”的实例仍然存在?

时间:2014-01-31 00:45:27

标签: javascript node.js

在JavaScript中销毁“类”实例的适当方法是什么?我正在使用node来“需要”我的类及其原型。我注意到,将类的实例设置为等于null似乎并没有真正破坏实例。

E.g:

课程

function coolClass(){
    this.bob = 'Hey, this is Bob. I should be destroyed, right?!';
    this.init();

    console.log('Cool class has been initialized!');
}

coolClass.prototype.init = function(){
    var self = this;
    this.culprit = setInterval(function(){
        console.log(self.bob);
    },1000);
}

exports.coolClass = coolClass;

创建&试图销毁实例

var coolClass = require('coolClass');

var instance = new coolClass();

setTimeout(function(){
    instance = null;
},5000);

我的期望是,一旦计时器的功能运行,coolClass实例将被销毁;但是,似乎我错了。

有关如何完全删除实例的任何想法?

谢谢!

2 个答案:

答案 0 :(得分:1)

  

将类的实例设置为null似乎实际上不会破坏实例。

您只是将您的引用(变量)丢弃给实例。但是,传递给setInterval的闭包仍有一个,因此它不是garbage collected

  

有关如何完全删除实例的任何想法?

您需要通过

停止间隔
clearInterval(instance.culprit);

然后,只要instance超出范围,垃圾收集器就会完成它的工作。

答案 1 :(得分:0)

> var instance = new coolClass();

创建 coolClass 的新实例,并为其指定引用作为 instance 的值。

> instance = null;

将实例的替换为null,它对以前由实例引用的对象没有任何作用,该对象将继续存在于至少只要有东西有引用它(例如传递给 setTimeout 的函数)。

在此之后的某个时间,可能会在主机环境中随心所欲地收集垃圾。