Javascript hasOwnProperty()方法

Javascript hasOwnProperty()方法,javascript,prototype,Javascript,Prototype,我试图理解hasOwnProperty()方法。。据我所知,该方法测试对象是否在该方法中具有具有给定名称的自有属性。但是,对于继承的属性,它返回false var o={ 名称:'主', 编号:'117', 最后一句:“酋长” }; o、 原型={ 行星:“光晕” }; 用于(o中的var p){ 如果(!o.hasOwnProperty(p)){ 继续; } 控制台日志(p); }您的代码创建一个对象并为其提供3个“自己的”属性: var o = { name: 'Master',

我试图理解hasOwnProperty()方法。。据我所知,该方法测试对象是否在该方法中具有具有给定名称的自有属性。但是,对于继承的属性,它返回false

var o={
名称:'主',
编号:'117',
最后一句:“酋长”
};
o、 原型={
行星:“光晕”
};
用于(o中的var p){
如果(!o.hasOwnProperty(p)){
继续;
}
控制台日志(p);

}
您的代码创建一个对象并为其提供3个“自己的”属性:

var o = {
  name: 'Master',
  number: '117',
  last: 'Chief'
};
然后,您只需使用以下内容创建第四个:

o.prototype = {
  planet: 'Halo'
};
在对象上检索属性时,首先检查当前对象的“自己”属性。如果没有找到属性,则检查原型链——一直到Object.prototype。如果在原型链中的任何位置都找不到该属性,则返回undefined

但是,当设置属性时,会发生不同的行为。无论该属性是否被继承,都会在当前对象上创建一个新属性作为“自己的”属性(如果该属性是访问器属性,则此规则的一个例外)


您正在设置的原型正在创建您在控制台中看到输出的第四个也是最后一个属性。

不可复制。此代码记录
名称、编号、最后一个、原型
,而不是
名称、编号、最后一个、工厂
。对象只继承自
object.prototype
,它没有任何可枚举属性(默认情况下)。有一篇文章对此方法进行了很好的解释。实际上,您所面临的是围绕原型继承的概念,这一点从您使用原型的失败尝试中可以明显看出。请阅读,并花一些时间正确地研究JavaScript中的OOP。请注意,
o.prototype
并没有什么特别之处,只是一个包含对象的命名奇怪的属性,因为
o
不是一个函数构造函数,而是一个literal@Recon但它不会记录行星(或植物)。这与打字错误无关。当您运行示例时,控制台中不会显示任何以
plan*
开头的内容。@请确认您没有检查控制台。。。无论如何,您的对象中没有任何继承属性,只有这些自己的属性:
name
number
last
prototype
。这就是您在控制台中看到的。请重新阅读adeneo的评论,这是你的答案。