CAF*_*FxX 5 javascript firefox firefox-addon firefox-addon-sdk
假设我正在A 基于Jetpack的库中编写一个类(即我们正在谈论chrome /扩展代码):
function A() {
//constructor
}
A.prototype = {
//class members
};
Run Code Online (Sandbox Code Playgroud)
用户创建类的实例A:
var a = new A();
Run Code Online (Sandbox Code Playgroud)
现在假设我想跟踪A创建的所有实例,我可以这样做:
var listA = [];
Run Code Online (Sandbox Code Playgroud)
并添加listA.push(this);构造函数A,最后得到:
var listA = [];
function A() {
// constructor
listA.push(this);
}
A.prototype = {
// class members
};
Run Code Online (Sandbox Code Playgroud)
一切都很好,直到用户a放弃它的引用(例如a超出范围).我现在有一个问题:listA仍然包含一个引用,a所以它永远不会被垃圾收集.此外,我无法过滤掉其他无法访问的listA实例A.我实际上是在泄漏记忆.
我需要的是推动listA弱引用而不是常规引用.我认为有可能以某种方式做到这一点,但我真的不知道从哪里开始.我可以想象:
var weak_a = new weakRef(a);
assert(weak_a.ref === a);
Run Code Online (Sandbox Code Playgroud)
但是,我不知道,例如,如何测试弱引用是否仍然有效.或者如何有效地过滤死弱的条目listA.有什么建议?
你只需要让你的类表明它支持弱引用。然后,当您想使用它的弱引用版本时,您将需要使用Components.utils.getWeakReference并存储它。 下面是一些测试代码,向您展示如何在 JavaScript 中更多地使用它。
| 归档时间: |
|
| 查看次数: |
1202 次 |
| 最近记录: |