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属性。 constructor
在Man
的原型链中,该原型链来自Man.prototype
。当您访问该属性时,它就可以从原型链中获取。
因此,从这里您还可以推断出原型链中的属性只能读取,不能修改。如果要修改,则需要直接访问。
但是,此问题已解决
在这种情况下,您实际上已经访问了原始对象并将其从该对象中删除。对于该对象,constructor
是直接/自有属性。