在javascript中不保持对象存活的引用列表

时间:2012-11-13 12:29:53

标签: javascript

此问题与此this类似,但我不想在Chrome代码中执行此操作。

在javascript(在浏览器中运行)中,我希望跟踪使用特定构造创建的所有对象。很简单,我可以这样做:

var listObjects = [];

function Object() {
  listObjects.push(this);
}

Object.prototype = {
  // class members
}; 

这很好,除非对象被保留,即使它们不再使用(垃圾收集器保留它们,因为在listObjects中仍有引用)创建内存泄漏。现在,我可以添加一个“removeObject”函数从列表中删除一个对象,但这需要用户在对象超出范围时手动调用。 现在,如果

,这可以解决
  1. 会有弱引用
  2. 可以找出一个对象有多少引用
  3. 可以定义一个自动调用的析构函数
  4. 不幸的是,根据我的研究,这些都不存在于javascript中(至少在它应该在浏览器中运行的时候不存在)。

    任何人都可以想到另一种方法可以在javascript中运行,或者我错过了一些可以用来执行此操作的javascript功能吗?

1 个答案:

答案 0 :(得分:1)

我认为JavaScript中没有任何语言支持,或者支持弱引用,至少在浏览器环境中不支持。

然而,您可以尝试一些(漂亮,漂亮,非常丑陋......)保持您对function Object()覆盖的想法,但让它写入一个不可见的{{1}在屏幕上显示要跟踪的对象的详细信息。

你去:跟踪而不保留对象的实际参考。但是你仍然需要实现一些查询函数来从该div中检索信息并在一段时间内清除它,或者你也有泄漏。

或者你可以做你的建议:创建一个通用的构造函数和一个通用的析构函数,但是这需要你明确地调用它们来从列表中删除对象。但是如果出现任何意外情况,你的析构函数就不会被调用,所以你可能会以意想不到的方式泄漏很多东西。

很想知道其他人是否可以考虑替代方案。