Firefox JavaScript chrome代码中的弱引用

时间:2011-02-25 15:32:35

标签: javascript firefox firefox-addon firefox-addon-sdk

假设我在基于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中的死弱条目。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

你只需要上课indicate it supports weak references。然后,当您想要使用它的弱引用版本时,您将需要使用Components.utils.getWeakReference并存储它。 Here is some test code,向您展示如何在JavaScript中更多地使用它。