首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Object.prototype.keys不是Object.keys?

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

Stack Overflow用户
提问于 2013-11-13 06:44:00
回答 2查看 3.1K关注 0票数 22

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

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

EN

回答 2

Stack Overflow用户

发布于 2013-11-13 06:48:51

因为您可以通过使用一个名为keys的键来定义对象来轻松覆盖它,该键包含一个值或函数。

代码语言:javascript
复制
var myObj = {
  val1: 'hi',
  keys: function() {
    return true;
  }
};

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

票数 4
EN

Stack Overflow用户

发布于 2013-11-13 06:59:41

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

代码语言:javascript
复制
var cls = function() {
    this.IAMAKEY = undefined;
    this.someMethod = function() {};
};

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

顺便说一句,添加Object.prototype.keys会返回键方法:)

但如果你一定要这样做:

代码语言:javascript
复制
Object.defineProperty(Object.prototype, 'keys', {
    writable: false,
    configurable:   false,
    value:          function() {
        return Object.keys(this);
    }
});
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19941499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档