hasOwnProperty()方法

时间:2016-02-17 19:45:35

标签: javascript prototype

我试图理解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()”会跳过继承的属性。

1 个答案:

答案 0 :(得分:-1)

您的代码会创建一个对象并为其提供3" own"属性:

var o = {
  name: 'Master',
  number: '117',
  last: 'Chief'
};

然后您只需创建第4个:

o.prototype = {
  planet: 'Halo'
};

在对象上检索属性时,当前对象"拥有"首先检查属性。如果没有找到属性,则检查原型链 - 一直到Object.prototype。如果在原型链中的任何地方都找不到该属性,则返回undefined。

但是当属性为SET时,会发生不同的行为。无论该属性是否被继承,都会创建一个新属性作为" own"当前对象的属性(此规则的一个例外是,如果有问题的属性是访问者属性)。

您正在设置的Prototype正在创建您在控制台中看到的第4个也是最后一个属性。