javascript - array - ¿Por qué Object.keys no es Object.prototype.keys?
object keys and values javascript (2)
Me pregunto por qué la especificación ha definido Object.keys
lugar de Object.prototype.keys
? seguramente sería mucho mejor si la API fuera consistente, y me gustaría entender por qué ese no es el caso.
Otros métodos están en Object.prototype
, entonces ¿por qué este no es el caso?
Debido a que podría anularlo fácilmente al definir su objeto con una tecla llamada keys
contienen un valor o una función.
var myObj = { val1:"hi", keys:function(){ return true; } };
¿Qué esperas que sea devuelto por myObj.keys()
?
Supongo que hicieron esto porque no siempre está claro qué son las claves y cuáles no, por ejemplo:
var cls = function() {
this.IAMAKEY = undefined;
this.someMethod = function() {};
};
Object.keys(new cls()); // [''IAMAKEY'', ''someMethod'']
Incidentalmente, al agregar Object.prototype.keys, se devuelve el método de las teclas :)
Pero si usted debe:
Object.defineProperty(Object.prototype, ''keys'', {
writable: false,
configurable: false,
value: function() {
return Object.keys(this);
}
});