如何完全破坏JavaScript类的实例?

时间:2015-09-03 20:10:29

标签: javascript

我的pip install six==1.8.0中有一个包含许多方法的类,我希望在完成后销毁它的实例。
This answer讲述了如何销毁类的实例,但我不确定实例中可能包含哪些变量和/或其他类型的引用,以及它阻止垃圾收集器删除的方法。

我知道我需要删除传递给prototype的函数之类的闭包。什么是可能的项目列表我需要做什么才能完全销毁实例?

2 个答案:

答案 0 :(得分:2)

这些是我知道你应该做的事情:

  1. 传递给setIntervalsetTimeout的所有功能必须具有声明,因此您可以通过等同于null来删除它们。
  2. 对所有人使用clearIntervalclearTimeout
  3. 方法中的所有闭包都必须声明 - 不能匿名 - 才能删除。
  4. 确保您没有使用全局变量,以便您的方法和闭包保留对它的引用。
  5. 在最后一步中使实例本身等于null。
  6. 希望它涵盖您所需要的一切。

答案 1 :(得分:1)

设置间隔将继续运行,因为由于对作为类的构造函数的A函数的闭包而无法释放实例(A)。 因此,您需要创建一个dispose模式,以释放垃圾收集器无法释放的所有资源。 之后,当垃圾收集器不再使用时,实例将被释放。

function A() {  
   this.timerId = setInterval(function(){ 
       console.log("A"); 
   }, 2000)
}

A.prototype.dispose = function() {
  clearInterval(this.timerId);
};

var instance = new A();

/* Will not work
instance = null;
*/

instance.dispose();
instance = null;