0

delete从某个对象中删除属性。

function Man() {
  this.eye = 2;
  this.mouth = 1;
}
Man.prototype.walk = function (arguments) {
  console.log("Im walking.");
}

var man1 = new Man();
var man2 = new Man();

delete man1.constructor;
console.log(man1.constructor); // function Man()

在那里,当然,通过委托,我正在删除man1原型的属性,即constructor属性。好吧,至少这是我的意图。但是当我登录时,我仍然得到构造函数。

然而,这个问题是固定的,当

delete man1.constructor.prototype.constructor;
console.log(man1.constructor);  // function Object()

现在我得到的是空对象。正如我应该的那样。

我的问题是:为什么第二个解决方案有效而第一个无效?是因为委托吗?我听说有效的delete man1.constructor.prototype.constructor;方法使用“隐式”引用。这意味着什么?还有一件事。为什么我仍然变得空虚Object并且没有可用内存?

4

1 回答 1

2

为什么你又得到了构造函数?

因为delete仅适用于对象的直接/自有属性,但您Man没有带有 name的直接/自有constructor属性。constructor是在Man来自的原型链中Man.prototype。当您访问该属性时,它只是从原型链中获取它。

所以从这里你也可以推断出原型链中的属性只能读取,不能修改。如果要修改,则需要直接访问。

然而,这个问题是固定的,当

在这种情况下,您实际上访问了原始对象并将其从该对象中删除。因为该对象constructor直接/拥有的属性。

于 2018-02-27T05:09:25.370 回答