为什么Object.keys不是Object.prototype.keys?

20 javascript prototype key object javascript-objects

我想知道为什么规范定义Object.keys而不是Object.prototype.keys?如果API一致,肯定会好得多,我想理解为什么不是这样.

还有其他方法Object.prototype,为什么不是这样呢?

hom*_*mtg 4

keys因为您可以通过使用称为保存值或函数的键定义对象来轻松覆盖它。

var myObj = {
  val1: 'hi',
  keys: function() {
    return true;
  }
};
Run Code Online (Sandbox Code Playgroud)

您期望得到什么回报myObj.keys()

  • 但这对于原型中的任何方法都是如此。为什么要单独挑出这个呢? (7认同)
  • @Mathletics也许是因为方法“keys”更有可能被意外覆盖,比如说方法“hasOwnProperty”,仅仅是因为更通用的名称? (6认同)
  • @Mathletics 事实并非如此。ES5 中添加的大多数新对象方法都是“Object”构造函数的方法,而不是其“原型”的方法。 (2认同)
  • 这没有道理。一致性在哪里?:-S (2认同)