我试图理解hasOwnProperty()方法..我理解该方法测试对象是否在方法中具有给定名称的自己的属性。但是,它会为继承的属性返回 false 。
var o = {
name: 'Master',
number: '117',
last: 'Chief'
};
o.prototype = {
planet: 'Halo'
};
for(var p in o) {
if(!o.hasOwnProperty(p)) {
continue;
}
console.log(p);
}
因此,当我运行此脚本时,控制台会从o.prototype返回“name”,“number”,“last”和“prototype”。有人可以给我一个解释为什么脚本如果返回继承的属性?我认为否定方法“hasOwnProperty()”会跳过继承的属性。
答案 0 :(得分:-1)
您的代码会创建一个对象并为其提供3" own"属性:
var o = {
name: 'Master',
number: '117',
last: 'Chief'
};
然后您只需创建第4个:
o.prototype = {
planet: 'Halo'
};
在对象上检索属性时,当前对象"拥有"首先检查属性。如果没有找到属性,则检查原型链 - 一直到Object.prototype。如果在原型链中的任何地方都找不到该属性,则返回undefined。
但是当属性为SET时,会发生不同的行为。无论该属性是否被继承,都会创建一个新属性作为" own"当前对象的属性(此规则的一个例外是,如果有问题的属性是访问者属性)。
您正在设置的Prototype正在创建您在控制台中看到的第4个也是最后一个属性。