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

obj.destroy();

这在 Chrome 中有效,但是由于某种原因,Firefox 引用了这个错误。有没有更好的方法在方法中杀死这个对象?

错误:

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

3 回答 3

3

不知道为什么 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();

尽可能接近合法地取消“这个”......

快乐编码。

于 2011-07-22T18:34:53.170 回答
2

叫我旧时尚,但是:

foo = null;
于 2011-07-22T18:37:04.960 回答
0

我不知道你为什么让这变得困难。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];
于 2011-07-22T19:30:37.987 回答