javascript hasOwnProperty和原型

时间:2013-11-08 04:18:23

标签: javascript

function Animal(name,numLegs){
this.name = name;
this.numLegs = numLegs}

Animal.prototype.sayName = function(){
console.log("Hi my name is " + this.name );}

var penguin = new Animal("Captain Cook", 2);
  penguin.sayName();
for (var prop in penguin){
console.log(prop);}
penguin.hasOwnProperty('sayName')

结果:

name
numLegs
sayName
=> false

我不知道为什么hasOwnProperty会返回false?任何人都可以解释一下吗?

3 个答案:

答案 0 :(得分:16)

当JavaScript正在寻找属性时,它首先会查看对象本身。如果它不存在,它通常会继续沿着原型链走。 hasOwnProperty存在只检查 对象本身,显然不走向原型链。如果要检查属性是否存在,请检查原型链中的所有内容,使用in运算符:

'sayName' in penguin  // => true

答案 1 :(得分:0)

因为hasOwnProperty检查属性本身是否存在,而不是作为继承的一个表单原型,read this

  

此方法可用于确定对象是否具有   指定属性作为该对象的直接属性;与in不同   运算符,此方法不会检查对象的原型   链

答案 2 :(得分:0)

因为'sayname'是继承自'Animal'而不是'企鹅'自己的财产。

检查:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

类似的例子:

function Foo() {
  this.value = 'qwert';
}
Foo.prototype.say = "hello";

var foo = new Foo();

foo.hasOwnProperty("say"); // False, since say is inherited from the prototype object.
foo.hasOwnProperty("value"); // True, since value is the property of foo itself.