5

假设我正在A 我的基于 Jetpack 的库中编写一个类(即我们正在谈论 chrome/extension 代码)

function A() {
  //constructor
}
A.prototype = {
  //class members
};

用户创建一个类的实例A

var a = new A();

现在假设我想跟踪A创建的所有实例,我可以这样做:

var listA = [];

并添加listA.push(this);的构造函数A,最终得到:

var listA = [];

function A() {
  // constructor
  listA.push(this);
}

A.prototype = {
  // class members
}; 

一切都很好,直到用户a放弃其参考(例如a超出范围)。我现在有一个问题:listA仍然包含对它的引用,a因此它永远不会被垃圾收集。此外,我无法过滤掉原本无法访问的listA实例。A我正在有效地泄漏内存。

我需要的是推送到listA弱引用而不是常规引用。我认为有可能以某种方式做到这一点,但我真的不知道从这里去哪里。我可以设想这样的事情:

var weak_a = new weakRef(a);
assert(weak_a.ref === a);

但是我不知道,例如,如何测试弱引用是否仍然有效。或者如何有效地过滤掉listA. 有什么建议么?

4

1 回答 1

3

你只需要让你的类表明它支持弱引用。然后,当你想使用它的弱引用版本时,你会想要使用Components.utils.getWeakReference和存储它。 这是一些测试代码,向您展示如何在 JavaScript 中更多地使用它。

于 2011-02-25T16:26:29.467 回答