在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
实例将被销毁;但是,似乎我错了。
有关如何完全删除实例的任何想法?
谢谢!
答案 0 :(得分:1)
将类的实例设置为null似乎实际上不会破坏实例。
您只是将您的引用(变量)丢弃给实例。但是,传递给setInterval
的闭包仍有一个,因此它不是garbage collected。
有关如何完全删除实例的任何想法?
您需要通过
停止间隔clearInterval(instance.culprit);
然后,只要instance
超出范围,垃圾收集器就会完成它的工作。
答案 1 :(得分:0)
> var instance = new coolClass();
创建 coolClass 的新实例,并为其指定引用作为 instance 的值。
> instance = null;
将实例的值替换为null
,它对以前由实例引用的对象没有任何作用,该对象将继续存在于至少只要有东西有引用它(例如传递给 setTimeout 的函数)。
在此之后的某个时间,可能会在主机环境中随心所欲地收集垃圾。