假设我在基于Jetpack的库中编写了一个类A
(即我们正在讨论chrome /扩展代码):
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
中的死弱条目。有什么建议吗?
答案 0 :(得分:3)
你只需要上课indicate it supports weak references。然后,当您想要使用它的弱引用版本时,您将需要使用Components.utils.getWeakReference
并存储它。 Here is some test code,向您展示如何在JavaScript中更多地使用它。