我想知道为什么规范定义了Object.keys
而不是Object.prototype.keys
?如果API是一致的肯定会好得多,我想理解为什么不是这样。
Object.prototype
上有其他方法,为什么不是这种情况呢?
答案 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);
}
});