Почему Object.keys не Object.prototype.keys?
Мне интересно, почему спецификация определила Object.keys
вместо Object.prototype.keys
? это было бы намного лучше, если бы API был согласован, и я хотел бы понять, почему это не так.
Другие методы находятся на Object.prototype
, так почему же это не так?
Ответы
Ответ 1
Потому что вы можете легко переопределить это, указав свой объект с помощью ключа с именем keys
, содержащего значение или функцию.
var myObj = { val1:"hi", keys:function(){ return true; } };
Что вы ожидаете получить от myObj.keys()
?
Ответ 2
Я бы предположил, что они сделали это, потому что не всегда понятно, что такое ключи, а какие нет, например:
var cls = function() {
this.IAMAKEY = undefined;
this.someMethod = function() {};
};
Object.keys(new cls()); // ['IAMAKEY', 'someMethod']
Кстати, добавление Object.prototype.keys возвращает метод ключей:)
Но если вы должны:
Object.defineProperty(Object.prototype, 'keys', {
writable: false,
configurable: false,
value: function() {
return Object.keys(this);
}
});