如何在Javascript跨浏览器中删除对象

时间:2011-07-22 18:19:07

标签: javascript model-view-controller object prototypal

var obj = {
    destroy: function(){this = null;}
};

obj.destroy();

这适用于Chrome,但是由于某些原因,firefox会引发错误。有没有更好的方法在方法中杀死这个对象?

错误:

invalid assignment left-hand side
[Break On This Error] destroy: function(){this = null;} 

3 个答案:

答案 0 :(得分:3)

不确定为什么Chrome允许,但您无法为此分配值。您可以引用它,但不能为其赋值。

如果你想要执行一些阵列破坏,你可以在你的destroy方法中引用this.myArrayName并释放你想要释放的任何内容,但是你不能只为它分配null来销毁一个实例。 / p>

我想你可以尝试这样的事情:

var foo = {
    // will nullify all properties/methods of foo on dispose
    dispose: function () { for (var key in this) this[key] = null; }
}

foo.dispose();

非常接近你可以合法地取消“这个”......

快乐的编码。

答案 1 :(得分:2)

叫我旧时尚,但是:

foo = null;

答案 2 :(得分:0)

我不确定你为什么这么难。 Javascript是一种垃圾收集语言。要做到允许释放某些东西,你所要做的就是确保在任何地方都没有更多的引用。

所以,如果你从:

开始
var obj = {
    data: "foo";
};

现在你想摆脱或“释放”那个对象,你所要做的就是清除对它的引用:

obj = null;

由于您的代码中不再引用您最初定义并分配给obj的数据结构,因此垃圾收集器将释放它。

对象不能自我毁灭(因为其他东西可能引用它)。您可以通过删除对它的所有引用来释放它。一个对象可以清除它自己对其他东西的引用,虽然这通常不是必需的,因为删除对象本身的所有引用也将处理它所拥有的引用(除了JS和DOM之间的循环引用的一些错误)在某些旧版浏览器中 - 特别是IE)。

有一次,如果您想要删除某个对象的属性,则可能会明确地“删除”某些内容。所以,如果你有:

var obj = {
    data: "foo",
    count: 4
};

您希望删除“data”属性,您可以使用此功能:

delete obj.data;

如果属性/键是通过如下变量以编程方式分配的:

var key = "xxx";
obj[key] = "foo";

您可以使用以下命令删除该密钥:

delete obj[key];