Javascript 对象方法的不一致行为';拥有自己的财产';

Javascript 对象方法的不一致行为';拥有自己的财产';,javascript,json,object,methods,ecmascript-5,Javascript,Json,Object,Methods,Ecmascript 5,问题陈述: 如果对象具有与JavaScript预定义的方法相同的属性名称。它无法执行,并给出以下错误 未捕获类型错误:obj.hasOwnProperty不是函数 代码: var obj1={ “键1”:“值1”, “键2”:“值2” } console.log(obj1.hasOwnProperty('key2'));//真的 变量obj2={ “键1”:“值1”, “键2”:“值2”, “hasOwnProperty”:“value3” } console.log(obj2.hasOwnP

问题陈述:

如果对象具有与JavaScript预定义的
方法相同的
属性
名称。它无法执行,并给出以下错误

未捕获类型错误:obj.hasOwnProperty不是函数

代码:

var obj1={
“键1”:“值1”,
“键2”:“值2”
}
console.log(obj1.hasOwnProperty('key2'));//真的
变量obj2={
“键1”:“值1”,
“键2”:“值2”,
“hasOwnProperty”:“value3”
}

console.log(obj2.hasOwnProperty('key2'));//未捕获类型错误:obj.hasOwnProperty不是函数
您可以使用prototype方法和
调用
将对象作为第一个参数传递:

var obj2={
“键1”:“值1”,
“键2”:“值2”,
“hasOwnProperty”:“value3”
}

log(Object.prototype.hasOwnProperty.call(obj2,'key2'))这不是不一致的,这是非常一致的,如果你重写一个方法,这就是你将得到的…因为JS会找到自己的属性
->
原型属性
->
等等,直到找到一些匹配。因此,JS发现
hasOwnProperty
是一个自有属性,甚至是
对象。hasOwnProperty
没有额外的属性,但这仍然有一些开销,因为(理论上)JS必须查找
对象的原型,因为
对象本身没有该属性。对不起,是的。我指的是不创建新对象的开销。我认为大多数JS引擎现在都在缓存原型链。只是出于好奇,我对获取
hasOwnProperty
的不同方法进行了jsPerf,简而言之,似乎没有性能差异。每次我在Chrome和Firefox上运行jsPerf时,不同的版本都是最快的。唯一一致的结果是,从对象直接获取是最慢的。实际上,删除最后的评论,。Firefox实际上与最快的选项非常一致,这是一个本地var快照,。。到处都是铬,真的不一致。另外,Firefox的另一个专业版要快得多,。。在我的机器上,每秒运行29964次,与Chromes 15740相比,低;Firefox的速度几乎是Chorme的两倍。。哦谷歌的V8引擎落后了吗?。。