Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Object.getOwnPropertyNames()与Object.prototype.hasOwnProperty()的比较_Javascript_Hasownproperty - Fatal编程技术网

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开始就没有引入新的对象方法。类似的是,在属性名方面也必须这样做。