【问题标题】:Self removing object自移除物体
【发布时间】:2014-07-29 10:53:12
【问题描述】:

我目前正在创建一个项目,其中每个可见元素都由 javascript 对象表示。

我需要这个对象中的一个方法,它可以让我销毁它。

有一个该对象的示例:

var example = function(some_args){
    var self = this;
    var references = {}; //this holds references to inputs within given view
    this.createView = function(){
        //here I`m doing "stuff" like filling innerHTML of container
        //creating event delegate, etc.
    }
    this.destroy = function(){
        self.elements["box"].parentNode.removeChild(self.elements["box"]);  //box is a reference to container element
        self.elements = null;
        delete self;
    }

现在,我的问题是:我是否正在尽我所能来彻底摧毁这个物体? 我没有持有任何其他对对象或元素的引用。

编辑: 我看到你们中的一些人不理解我的问题。 Barmar 做对了,对此我很感激 :)

我知道 GC,写“我正在销毁对象”比“我正在删除对对象的最后一个引用,所以 GC 可以处理它”更容易:)

具体来说。考虑到我正在删除对对象的最后引用,这是该对象的一部分的内部函数 - 还有什么我应该注意的吗?还是我的代码完全没问题,对象会被视为垃圾?

【问题讨论】:

    标签: javascript object self-reference


    【解决方案1】:

    您不会在 JS 中明确处理对象的生命周期。

    所以对于给定的问题:

    我是否正在尽我所能来彻底摧毁这个物体?

    唯一的答案是:

    你不能这样做,因为 JS 中的对象只能被 GC 销毁,而你无法与之交互。当一个对象是可访问的 - 那么它是活着的。如果不是 - 那么它就是“Schroedinger's object”。

    【讨论】:

      【解决方案2】:

      Javascript 有一个垃圾收集器,所以你不需要销毁对象。你也不能

      【讨论】:

      • 我认为他的问题的重点是他是否正在尽一切必要确保对象变成垃圾,以便可以收集。
      • 是的,那我guest对对象的所有引用都必须删除,这样GC就可以轻松收集对象了。不是吗?
      • 阅读问题的最后一行:他没有对该对象的任何引用。他想确保 ​​DOM 中没有对它的引用。
      猜你喜欢
      • 1970-01-01
      • 2016-03-25
      • 2023-03-28
      • 2013-12-24
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 2014-03-25
      相关资源
      最近更新 更多