以两种方式删除属性,但只有一种有效
Deleting properties in two ways, but only one works
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;
使用 "implicit" 参考。那是什么意思?还有一件事。为什么我仍然是空的 Object
并且没有空闲内存?
Why you get the constructor again ?
因为delete
只适用于对象的direct/own属性,但是你的Man
没有direct/own 属性 姓名 constructor
。 constructor
位于来自 Man.prototype
的 Man
的原型链中。当您访问那个 属性 时,它会从原型链中获取它。
所以从这里你也可以推断出原型链中的属性只能读取,不能修改。如果要修改,需要直接访问。
However, this problem is fixed when
在这种情况下,您实际上访问了原始对象并将其从该对象中删除。对于那个对象 constructor
是一个 direct/own 属性.
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;
使用 "implicit" 参考。那是什么意思?还有一件事。为什么我仍然是空的 Object
并且没有空闲内存?
Why you get the constructor again ?
因为delete
只适用于对象的direct/own属性,但是你的Man
没有direct/own 属性 姓名 constructor
。 constructor
位于来自 Man.prototype
的 Man
的原型链中。当您访问那个 属性 时,它会从原型链中获取它。
所以从这里你也可以推断出原型链中的属性只能读取,不能修改。如果要修改,需要直接访问。
However, this problem is fixed when
在这种情况下,您实际上访问了原始对象并将其从该对象中删除。对于那个对象 constructor
是一个 direct/own 属性.