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

时间:2013-11-12 22:44:00

标签: javascript object key prototype javascript-objects

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

Object.prototype上有其他方法,为什么不是这种情况呢?

2 个答案:

答案 0 :(得分:4)

因为你可以通过使用一个名为keys的键来定义你的对象来容易地覆盖它。持有一个值或一个函数。

var myObj = {
  val1: 'hi',
  keys: function() {
    return true;
  }
};

您期望myObj.keys()返回什么?

答案 1 :(得分:4)

我认为他们这样做是因为并不总是清楚什么是键,什么不是,例如:

var cls = function() {
    this.IAMAKEY = undefined;
    this.someMethod = function() {};
};

Object.keys(new cls()); // ['IAMAKEY', 'someMethod']

顺便提一下,添加Object.prototype.keys,返回keys方法:)

但如果你必须:

Object.defineProperty(Object.prototype, 'keys', {
    writable: false,
    configurable:   false,
    value:          function() {
        return Object.keys(this);
    }
});