如何正确地取消引用,然后删除一个JavaScript对象

How to correctly dereference then delete a JavaScript Object?

本文关键字:一个 对象 JavaScript 删除 正确地 取消 引用 然后      更新时间:2023-09-26

我想知道从内存中完全解引用JavaScript对象的正确方法。以确保它的删除不会在内存中悬空,并且垃圾收集器会删除该对象。

当我看到这个问题在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它的方法(如果是这样的话,如何)?

或者可能有更好更简单的方法来做到这一点?

Javascript是一种垃圾收集语言。只有当没有其他代码引用对象时,它才会清理对象。那些其他引用要么需要超出作用域(并且不由闭包保存),要么可以将这些其他变量设置为其他东西,这样它们就不会指向您的对象。当没有其他变量引用你的对象时,它将被垃圾收集器自动处理,包括它拥有的任何属性(假设这些属性本身都不是某个东西引用的对象-但即使这样,宿主对象也会被清理,只有属性中的对象将继续存在)。

在Javascript中不能以其他方式删除对象。

因此,要删除由this创建的对象:

var myInstance = new myObject(24, 42) // How to remove this completely?

像这样清除myInstance:

myInstance = null;

您根本不需要手动从myInstancedelete属性。如果没有人有对母对象的引用,并且没有任何属性是有人引用的对象,那么垃圾收集器将为您清理所有内容。

delete操作符主要用于当您希望保留母对象时(例如,当您只想删除属性时)从对象中删除属性。