我想知道为什么规范已经定义Object.keys
而不是Object.prototype.keys
?如果 API 是一致的,那肯定会好得多,我想了解为什么不是这样。
其他方法都 on Object.prototype
,那为什么不是这样呢?
我想知道为什么规范已经定义Object.keys
而不是Object.prototype.keys
?如果 API 是一致的,那肯定会好得多,我想了解为什么不是这样。
其他方法都 on Object.prototype
,那为什么不是这样呢?
keys
因为您可以通过使用称为保存值或函数的键定义对象来轻松覆盖它。
var myObj = {
val1: 'hi',
keys: function() {
return true;
}
};
你希望得到什么回报myObj.keys()
?
我会假设他们这样做是因为并不总是清楚什么是键,什么不是,例如:
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);
}
});