22

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

其他方法都 on Object.prototype,那为什么不是这样呢?

4

2 回答 2

4

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

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

你希望得到什么回报myObj.keys()

于 2013-11-12T22:48:50.783 回答
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);
    }
});
于 2013-11-12T22:59:41.367 回答