var obj = {
destroy: function(){this = null;}
};
obj.destroy();
这在 Chrome 中有效,但是由于某种原因,Firefox 引用了这个错误。有没有更好的方法在方法中杀死这个对象?
错误:
invalid assignment left-hand side
[Break On This Error] destroy: function(){this = null;}
var obj = {
destroy: function(){this = null;}
};
obj.destroy();
这在 Chrome 中有效,但是由于某种原因,Firefox 引用了这个错误。有没有更好的方法在方法中杀死这个对象?
错误:
invalid assignment left-hand side
[Break On This Error] destroy: function(){this = null;}
不知道为什么 Chrome 允许它,但你不能为此赋值。您可以引用它,但不能为其赋值。
如果您想要执行一些数组破坏,您可以在您的破坏方法中引用 this.myArrayName 并释放您要释放的任何内容,但您不能只将 null 分配给 this 来破坏实例。
我想你可以尝试这样的事情:
var foo = {
// will nullify all properties/methods of foo on dispose
dispose: function () { for (var key in this) this[key] = null; }
}
foo.dispose();
尽可能接近合法地取消“这个”......
快乐编码。
乙
叫我旧时尚,但是:
foo = null;
我不知道你为什么让这变得困难。Javascript 是一种垃圾收集语言。要释放某些内容,您所要做的就是确保在任何地方都不再引用它。
所以,如果你开始:
var obj = {
data: "foo";
};
现在您想摆脱或“释放”该对象,您所要做的就是清除对它的引用:
obj = null;
由于您的代码中不再有对您最初定义和分配给obj
的数据结构的任何引用,因此垃圾收集器将释放它。
一个对象不能销毁自己(因为其他事物可能对它有引用)。您可以通过删除对它的所有引用来释放它。一个对象可以清除它自己对其他事物的引用,尽管这通常不是必需的,因为删除对对象本身的所有引用也会处理它持有的引用(除了一些在 JS 和 DOM 之间循环引用的错误在某些较旧的浏览器中 - 特别是 IE)。
有一次你可能会明确地“删除”某物,如果你有一个你想要删除的对象的属性。所以,如果你有:
var obj = {
data: "foo",
count: 4
};
并且您希望删除“数据”属性,您可以这样做:
delete obj.data;
如果属性/键是通过这样的变量以编程方式分配的:
var key = "xxx";
obj[key] = "foo";
您可以使用以下方法删除该密钥:
delete obj[key];