JavaScript是否与Perl的DESTROY方法等效?

时间:2010-05-19 21:35:54

标签: javascript perl firefox garbage-collection destroy

在JavaScript垃圾收集器清理元素之前,是否有任何调用的方法或事件被调度?

在Perl中我会写:

package MyObj;

sub new {bless {}}

sub DESTROY {print "cleaning up @_\n"}

然后再说:

{
    my $obj = MyObj->new;

    # do something with obj

}  # scope ends, and assuming there are no external references to $obj,
   #   the DESTROY method will be called before the object's memory is freed

我的目标平台是Firefox(我不需要支持其他浏览器),所以如果只有Firefox特定的方式,那就没问题了。

还有一点背景:我正在编写Perl模块XUL::Gui,它是Perl和Firefox之间的桥梁,我目前正在努力插入与DOM Elements相关的一些内存泄漏,即使在它们已经消失了,Perl方面也没有更多的引用。因此,我正在寻找方法来确定何时销毁JavaScript Elements,或者强制JavaScript清理对象的方法。

如果在纯JavaScript中无法做到这一点,则可以使用XPConnect / XPCOM或任何其他Mozilla特定技术的解决方案。

2 个答案:

答案 0 :(得分:3)

XUL :: Gui是否允许您在SpiderMonkey API层与浏览器进行交互?如果是这样,https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JSClass.finalize可能对您有用。否则,你可能会陷入困境,因为Matthew Flaschen上面说过,在Javascript中无法做到这一点。

答案 1 :(得分:1)

纯JavaScript中没有相应的机制。