删除这在JS中是否有意义?

时间:2016-12-21 15:05:49

标签: javascript

我理解:

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真的被删除了吗?是否释放了所有内存?

由于

2 个答案:

答案 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仅删除对象中的属性。