我理解:
var obj = {
foo: 'bar'
};
delete obj.foo;
将对键/值foo
/ 'bar'
移除到obj
对象。或者换句话说,它将对内容'bar'
的引用释放到对象(意味着它将在某个时刻被垃圾收集)。
我也可以写:
delete obj;
它背后的场景如下:
delete window.obj;
离开window
而不提及obj
。
我并不完全了解this
关键字在JS中是如何工作的,但我的观点是它是一个绑定到方法执行的对象。
但我不确定写作是否有意义:
delete this;
return this;
,会发生什么?null
?特别是我试图销毁使用new
构建的对象:
function MyClass() = {
return this;
};
MyClass.prototype.destroy = function() {
delete this;
};
var myInstance = new MyClass();
myInstance.destroy();
myInstance
真的被删除了吗?是否释放了所有内存?
由于
答案 0 :(得分:5)
myInstance
真的被删除了吗?是否释放了所有内存?
没有。 That's what delete
never did.
从哪个对象移除引用?
不是。 this
关键字不是属性引用 - 它的工作方式与文字相似。该构造使delete 0
具有同样的意义。
同样,局部变量不是属性引用;在严格模式下,当你尝试delete
时,你会得到一个例外。我想知道为什么delete this
不会抛出。
答案 1 :(得分:3)
我也可以写:
它背后的场景如下:delete obj;
delete window.obj;
不,你不能,不,它没有。它什么都不做。
var obj = {
foo: 'bar'
};
delete obj;
console.log(obj);

但我不确定写作是否有意义:
delete this;
这也什么都没做。
function foo() {
delete this;
console.log(this);
}
var bar = {
foo: foo
};
bar.foo();

delete
仅删除对象中的属性。