代码之家  ›  专栏  ›  技术社区  ›  Eric Strom

javascript是否与perl的destroy方法等价?

  •  2
  • Eric Strom  · 技术社区  · 14 年前

    在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元素相关的内存泄漏,即使它们已经消失,Perl端也不再保留任何引用。所以我在寻找一种方法,要么找出javascript元素何时会被销毁,要么强制javascript清理对象。

    如果无法用纯javascript实现这一点,那么可以使用xpconnect/xpcom或任何其他特定于mozilla的技术。

    2 回复  |  直到 14 年前
        1
  •  3
  •   Dan    14 年前

    gui允许您在spidermonkey api层与浏览器交互吗?如果是这样, https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JSClass.finalize 可能对你有用。否则,您可能会陷入困境,因为正如matthew flaschen在上面所说,在javascript中无法做到这一点。

        2
  •  1
  •   Matthew Flaschen    14 年前

    纯javascript中没有这种机制。