Por el código de producción que requiere una gran compatibilidad con los navegadores cliente todavía sugieren respuesta de Ivan Nevostruev anterior con cuña para asegurar Object.keys
en navegadores antiguos. Sin embargo, es posible obtener la funcionalidad exacta solicitada utilizando la nueva función defineProperty
de ECMA.
A partir de ECMAScript 5 - Object.defineProperty
A partir de ECMA5 puede utilizar para definir las propiedades Object.defineProperty()
no enumerables. El current compatibility todavía tiene mucho que desear, pero finalmente debería poder usarse en todos los navegadores. (Específicamente en cuenta la incompatibilidad actual con IE8!)
Object.defineProperty(Object.prototype, 'keys', {
value: function keys() {
var keys = [];
for(var i in this) if (this.hasOwnProperty(i)) {
keys.push(i);
}
return keys;
},
enumerable: false
});
var o = {
'a': 1,
'b': 2
}
for (var k in o) {
console.log(k, o[k])
}
console.log(o.keys())
# OUTPUT
# > a 1
# > b 2
# > ["a", "b"]
Sin embargo, desde ECMA5 ya se añadió Object.keys
que también podría utilizar:
Object.defineProperty(Object.prototype, 'keys', {
value: function keys() {
return Object.keys(this);
},
enumerable: false
});
Respuesta original
Object.prototype.keys = function()
{
var keys = [];
for(var i in this) if (this.hasOwnProperty(i))
{
keys.push(i);
}
return keys;
}
Editar: Dado que esta respuesta ha existido por un tiempo, dejaré intacta lo de arriba. Cualquiera que lea esto también debe leer la respuesta de Ivan Nevostruev a continuación.
No hay forma de hacer que las funciones de prototipo no sean enumerables, lo que las lleva a aparecer siempre en bucles for-in que no usan hasOwnProperty
. Sigo pensando que esta respuesta sería ideal si ampliar el prototipo de Object no fuera tan desordenado.
I Estoy entrando en javascript pero esta publicación puede ayudarte. http://dean.edwards.name/weblog/2006/07/enum/ –
Posible duplicado de [Obtener matriz de claves del objeto] (http://stackoverflow.com/questions/8763125/get-array-of-objects- teclas) – blo0p3r
¿Qué tal obtener los valores de las claves? Además, obtener la cantidad de claves en un hash. –