Javascript:为什么Object.keys(someobject),而不是someobject.keys?

我经常得到一个对象键的数组:
Object.keys(someobject)

我很乐意这样做我知道Object是Object构造函数,而keys()是它的一个方法,key()将返回一个列表,作为第一个参数给出的任何对象.我的问题不是如何得到一个对象的键 – 请不要回答与解答这个的非答案.

我的问题是,为什么没有更可预测的键()或getKeys()方法,或者键实例变量在Object.prototype上可用,所以我可以有:

someobject.keys()

或作为实例变量:

someobject.keys

并返回数组的键?

再次,我的意图是了解Javascript的设计,以及采用一些不直观的提取键机制的目的是什么.我不需要帮助获得钥匙.

解决方法

我想你的问题的答案是“因为委员会决定了”,但是我可以听到你问“为什么?在这句话结束之前.

我最近读了这个,但是现在找不到来源.可以理解的是,在许多情况下,您必须使用Object.prototype.keys.call(myobject),因为myobject.keys的可能性已经在对象中被用于其他的东西.

我想你会发现这个archived mail thread有趣的,例如Br​​endan Eich在ECMAScript 5中讨论了新方法的一些方面.

更新:
mail-archive挖掘我发现this

Topic: Should Object.keys be repositioned as Object.prototype.keys

Discussion: Allen argued that this isn’t really a meta layer operation
as it is intended for use in application layer code as an alternative
to for..in for getting a list of enumerable property names. As a
application layer method it belongs on Object.prototype rather than on
the Object constructor. There was general agreement in principle,but
it was pragmatically argued by Doug and Mark that it is too likely
that a user defined object would define its own property named “keys”
which would shadow Object.prototype.keys making it inaccessible for
use on such objects.

Action: Leave it as Object.keys.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...