Javascript Object.getOwnPropertyNames()与Object.prototype.hasOwnProperty()的比较
这两个显然做了相似的事情,但我的问题是,为什么一个在原型上,一个在对象上 例如,这两种方法的调用方式都不同。这种情况有逻辑上的原因吗Javascript Object.getOwnPropertyNames()与Object.prototype.hasOwnProperty()的比较,javascript,hasownproperty,Javascript,Hasownproperty,这两个显然做了相似的事情,但我的问题是,为什么一个在原型上,一个在对象上 例如,这两种方法的调用方式都不同。这种情况有逻辑上的原因吗 var o = {name: "value"} o.hasOwnProperty("name") //true Object.getOwnPropertyNames(o); //name //Couldn't the above have been coded so we can run o.getOwnPropertNames(); 谢谢。将这些方法添加
var o = {name: "value"}
o.hasOwnProperty("name") //true
Object.getOwnPropertyNames(o); //name
//Couldn't the above have been coded so we can run o.getOwnPropertNames();
谢谢。将这些方法添加到原型中的问题是它们容易过载
var o = {};
o.getOwnPropertyNames = 17;
//What now?
事实上,你经常会看到人们这样做
Object.prototype.hasOwnProperty.call(o, propname);
为了避免。那么为什么原型上有
hasOwnProperty
。只是我们现在不能在不破坏向后兼容性的情况下“修复”它。真的吗?不过,我会尽量控制一下我的否决投票冲动。@KingKongFrog:因为它最初就是这样设计的,并且必须保持向后兼容性。事实上,似乎从ES3开始就没有引入新的对象方法。类似的是,在属性名方面也必须这样做。