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属性。好吧,至少那是我的意图。但是当我登录时,我仍然获得了Constructor函数。

但是,此问题已解决

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


现在我得到的是空对象。如我所愿。

我的问题是:为什么第二个解决方案有效而第一个无效?是因为授权吗?我听说可以使用delete man1.constructor.prototype.constructor;的人使用“隐式”引用。那是什么意思?还有一件事。为什么为什么我的Object仍然空着,没有可用的内存?

最佳答案

为什么要再次获得构造函数?


因为delete仅适用于对象的direct / own属性,但是您的Man没有名称为constructor的direct / own属性。 constructorMan的原型链中,该原型链来自Man.prototype。当您访问该属性时,它就可以从原型链中获取。

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


  但是,此问题已解决


在这种情况下,您实际上已经访问了原始对象并将其从该对象中删除。对于该对象,constructor是直接/自有属性。

07-24 17:38
查看更多