我想知道从内存中完全取消引用JavaScript对象的正确方法。确保删除它而不会在内存中悬空,并且垃圾收集器会删除该对象。
当我看到这个问题时Deleting Objects in JavaScript。据解释,如果删除对象的所有引用,GC将从内存中删除它。我想知道如何从具有方法和属性的对象中删除引用。
假设您拥有使用function
创建的对象,并且该对象具有方法和属性。说它看起来像这样:
function myObject(x, y) {
this.x = x;
this.y = y;
this.myMethod = function() {
// method code
}
}
var myInstance = new myObject(24, 42) // How to remove this completely?
注意:这是一个例子,我知道你可以使用prototype
作为方法。
我知道我不能只说delete myInstance
。所以在这种情况下要完全删除对象,我需要在它的所有属性上调用delete
,然后在实例上调用delete
,就像这样吗?
delete myInstance.x;
delete myInstance.y;
delete myInstance; // I'm not sure if this is necessary.
这会有用吗?或者我还需要delete
它的方法(如果是这样的话)?
或许有更好更简单的方法来做到这一点?
答案 0 :(得分:10)
Javascript是一种垃圾收集语言。只有当没有其他代码引用它时,它才会清理对象。那些其他引用需要超出范围(并且不能由闭包持有),或者您可以将其他变量设置为其他变量,这样它们就不会指向您的对象。当没有其他变量引用你的对象时,它将由垃圾收集器自动处理,包括它拥有的任何属性(假设这些属性本身都不是某些东西引用的对象 - 但即便如此主机对象将被清理,只有属性中的对象将继续存在。)
您无法在Javascript中以任何其他方式删除对象。
因此,要删除由此创建的对象:
var myInstance = new myObject(24, 42) // How to remove this completely?
只需清除myInstance
,就像这样:
myInstance = null;
您根本无需手动delete
来自myInstance
的属性。如果没有人对母对象有引用,并且没有属性是某人引用的对象,那么垃圾收集器就会为你清理所有内容。
delete
运算符主要用于在希望保留母对象时从对象中删除属性(例如,当您只想删除属性时)。