pour le code de production nécessitant une grande compatibilité avec les navigateurs client je suggère toujours la réponse d'Ivan Nevostruev ci-dessus avec cale pour assurer Object.keys
dans les anciens navigateurs. Cependant, il est possible d'obtenir la fonctionnalité exacte demandée en utilisant la nouvelle fonctionnalité defineProperty
d'ECMA.
Au ECMAScript 5 - Object.defineProperty
Au ECMA5 vous pouvez utiliser Object.defineProperty()
pour définir les propriétés non-dénombrables. Le current compatibility a encore beaucoup à désirer, mais cela devrait éventuellement devenir utilisable dans tous les navigateurs. (Note précisément l'incompatibilité actuelle avec 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"]
Cependant, depuis ECMA5 déjà ajouté Object.keys
vous pourriez aussi bien utiliser:
Object.defineProperty(Object.prototype, 'keys', {
value: function keys() {
return Object.keys(this);
},
enumerable: false
});
réponse originale
Object.prototype.keys = function()
{
var keys = [];
for(var i in this) if (this.hasOwnProperty(i))
{
keys.push(i);
}
return keys;
}
Modifier: Depuis cette réponse a été autour depuis un certain temps, je vais laisser ce qui précède intacte. Toute personne lisant ceci devrait également lire la réponse d'Ivan Nevostruev ci-dessous.
Il n'y a aucun moyen de rendre les fonctions prototypes non énumérables, ce qui les amène toujours à apparaître dans les boucles for-in qui n'utilisent pas hasOwnProperty
. Je pense toujours que cette réponse serait idéale si étendre le prototype d'Object n'était pas si compliqué.
I Je suis juste en train de sauter dans javascript mais ce message peut vous aider. http://dean.edwards.name/weblog/2006/07/enum/ –
Copie possible de [Obtenir le tableau des clés de l'objet] (http://stackoverflow.com/questions/8763125/get-array-of-objects- keys) – blo0p3r
Qu'en est-il de l'obtention des valeurs à partir des clés? En outre, obtenir le nombre de clés dans un hachage. –