AL-*_*ami 1 javascript oop class hasownproperty
这里我创建了一个父类的实例,并在对象本身上定义了一个名为 smile 的属性。我知道构造函数原型上定义的属性不是对象自己的属性。但是为什么“smile”属性没有通过 for in 循环内的 hasOwnProperty 测试?
function Parent(){
this.name='parent';
}
Parent.prototype.age='34';
var p=new Parent();
p.smile='nice'; // not an own property ?
console.log(p);
for(var prop in p){
if(Object.hasOwnProperty(prop)){
console.log(prop); // prints only "name"
}
}
Run Code Online (Sandbox Code Playgroud)
你用错了Object.prototype.hasOwnProperty()。上述函数将以被测试对象作为上下文来调用,这意味着您应该这样做p.hasOwnProperty(prop)而不是Object.hasOwnProperty(prop). 然后你就会得到你期望的结果。
hasOwnProperty 是在 上定义的Object.prototype,这意味着大多数对象(除了您手动将原型设置为 的对象之外null)将继承该方法,以便可以在它们上调用该方法。p就是这样一个物体。它的原型链没有什么异常,所以根据上面的描述进行更改后应该可以工作。
现在您可能会问为什么您的代码不会在 if 语句行上抛出错误。这是因为Object是一个函数,因此最终继承自Object.prototype。