【问题标题】:Object.getOwnPropertyNames() vs Object.prototype.hasOwnProperty() [duplicate]Object.getOwnPropertyNames() 与 Object.prototype.hasOwnProperty() [重复]
【发布时间】:2014-03-18 18:02:58
【问题描述】:

这两个显然都做类似的事情,但我的问题是为什么一个在原型上,一个在对象上?

例如,这两者的调用方式不同。出现这种情况有合理的原因吗?

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();

谢谢。

【问题讨论】:

  • 与属性名称类似。

标签: javascript hasownproperty


【解决方案1】:

将这些方法添加到原型的问题在于它们很容易过载。

var o = {};
o.getOwnPropertyNames = 17;
//What now?

事实上,你会经常看到人们这样做

Object.prototype.hasOwnProperty.call(o, propname);

为了避免the overloading issue with hasOwnProperty

【讨论】:

  • 那么为什么hasOwnProperty 在原型上?
  • 没有充分的理由说实话。只是我们现在不能在不破坏向后兼容性的情况下“修复”它。
  • 真的吗?不过,我会尽量控制自己投反对票的冲动。
  • @KingKongFrog:因为它最初就是这样设计的,为了向后兼容而不得不保留。
  • 实际上似乎从 ES3 开始没有引入新的对象方法。
猜你喜欢
  • 2016-08-31
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 2017-09-12
  • 2023-04-09
  • 1970-01-01
  • 2013-10-12
  • 1970-01-01
相关资源
最近更新 更多