我想知道为什么规范定义了Object.keys
而不是Object.prototype.keys
?如果API保持一致,那肯定会更好,我想了解为什么情况不是如此。
其他方法都在Object.prototype
中,为什么这个方法不在其中呢?
我想知道为什么规范定义了Object.keys
而不是Object.prototype.keys
?如果API保持一致,那肯定会更好,我想了解为什么情况不是如此。
其他方法都在Object.prototype
中,为什么这个方法不在其中呢?
因为您可以通过定义一个名为keys
的键来轻松地覆盖它,该键包含一个值或函数。
var myObj = {
val1: 'hi',
keys: function() {
return true;
}
};
myObj.keys()
返回什么?Object
构造函数的方法,而不是它的原型方法。 - Jonathan Lonowski我认为他们这样做是因为有时候很难明确哪些是键,哪些不是,例如:
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);
}
});
Object.prototype
不应再被扩展。 - Jonathan Lonowski