11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

Je vais essayer de vous expliquer mon problème le plus clairement possible. Je possède un script qui étend les objets de plusieurs fonctions. Exemple :


Object.prototype.sayHello = function(){ alert('Hello'); } 


Lorsque je désire créer un objet et le parcourir via la boucle for..in la fonction 'sayHello' est récuperée. Exemple:


var monObjet = {arg1: 'toto', arg2: 'tata', arg3: 'titi'}
for(var entry in monObjet){
    alert(entry);
}


Ma question : comment récupérer uniquement mes valeurs 'arg1', 'arg2', 'arg3' ? Je pourrais passer par une boucle for basique mais je désire récupérer les clés.

Merci d'avance
Modifié par Kadheus (03 Apr 2008 - 14:06)
Hello,

Il est en général fortement déconseillé d'ajouter des propriétés à Object.prototype, car cela affecte tous les scripts de la page courante et peut avoir des effets de bord très désagréables comme celui que tu as rencontré.

Pour éviter de parcourir des propriétés appartenant au prototype de l'objet, il faut utiliser hasOwnProperty :
var monObjet = {arg1: 'toto', arg2: 'tata', arg3: 'titi'};
for (var entry in monObjet) {
  if (monObjet.hasOwnProperty(entry)) {
    alert(entry);
  }
}

C'est une très bonne pratique pour toute boucle for... in, d'ailleurs signalée par JSLint.

Attention, hasOwnProperty n'est disponible pour IE qu'à partir de la version 5.5.