假设我正在写一个类A
在我基于 Jetpack 的库中(即我们正在讨论 chrome/扩展代码):
function A() {
//constructor
}
A.prototype = {
//class members
};
用户创建类的实例A
:
var a = new A();
现在假设我想跟踪所有实例A
创建后,我可以这样做:
var listA = [];
and add 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
。有什么建议么?
你只需要上课表明它支持弱引用 https://developer.mozilla.org/en/Weak_reference。然后,当您想使用它的弱引用版本时,您将需要使用Components.utils.getWeakReference https://developer.mozilla.org/en/Components.utils.getWeakReference并存储它。这是一些测试代码 https://mxr.mozilla.org/mozilla-central/source/js/src/xpconnect/tests/unit/test_js_weak_references.js这向您展示了如何在 JavaScript 中更多地使用它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)