假设我正在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
. 有什么建议么?