如何正确地取消引用,然后删除一个JavaScript对象
How to correctly dereference then delete a JavaScript Object?
我想知道从内存中完全解引用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;
您根本不需要手动从myInstance
中delete
属性。如果没有人有对母对象的引用,并且没有任何属性是有人引用的对象,那么垃圾收集器将为您清理所有内容。
delete
操作符主要用于当您希望保留母对象时(例如,当您只想删除属性时)从对象中删除属性。
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- AngularJS&JSON-从Previous&下一个对象
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript函数,它接受两个输入:一个对象和一个键,并返回对象中该键的相应值
- 你能用来自数组的属性名称生成一个对象吗
- 预期响应包含一个对象,但在angular js中得到一个数组错误
- Protractor:element.getText()返回一个对象,而不是String
- 如何使用jQuery添加另一个对象的高度作为边距
- 计算从一个对象到另一个对象的路径并沿其移动
- 如何将一个对象添加到每个对象数组中
- 为了避免创建全局变量,可以将所有变量分配给一个对象吗
- 将javascript对象(属性+值)合并到一个对象中
- 尝试简化检查对象键是否为true并将其推送到另一个对象
- 从 javascript 中的对象方法返回一个对象
- 响应应包含一个对象,但得到的却是GET操作的数组
- js:如何制作一个循环,将20个不同的东西添加到一个对象中
- 用javascript创建另一个对象的实例