var obj = {
destroy: function(){this = null;}
};
obj.destroy();
这适用于Chrome,但是由于某些原因,firefox会引发错误。有没有更好的方法在方法中杀死这个对象?
错误:
invalid assignment left-hand side
[Break On This Error] destroy: function(){this = null;}
答案 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];