首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript hasOwnProperty和原型

javascript hasOwnProperty和原型
EN

Stack Overflow用户
提问于 2013-11-08 12:18:23
回答 3查看 2.8K关注 0票数 5
代码语言: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')

结果:

代码语言:javascript
复制
name
numLegs
sayName
=> false

我不知道为什么hasOwnProperty返回false??有谁能解释一下吗?

EN

回答 3

Stack Overflow用户

发布于 2013-11-08 12:21:31

当JavaScript查找属性时,它首先查找对象本身。如果它不在那里,它通常会一直沿着原型链向上移动。hasOwnProperty的存在只是为了检查对象本身,而不是显式地沿着原型链进行遍历。如果您想检查某个属性是否存在,检查原型链中的所有内容,请使用in运算符:

代码语言:javascript
复制
'sayName' in penguin  // => true
票数 17
EN

Stack Overflow用户

发布于 2013-11-08 12:22:58

因为hasOwnProperty检查属性本身是否存在,而不是作为继承的one form原型,所以read this

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

票数 1
EN

Stack Overflow用户

发布于 2013-11-08 12:24:59

因为'sayname‘是从'Animal’继承的,而不是'penguin‘自己的属性。

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

类似的例子:

代码语言:javascript
复制
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.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19851511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档