Parcourir les propriétés d'un objet mais les méthodes

slecocq Messages postés 2 Date d'inscription vendredi 20 avril 2012 Statut Membre Dernière intervention 25 janvier 2013 - 20 avril 2012 à 09:45
slecocq Messages postés 2 Date d'inscription vendredi 20 avril 2012 Statut Membre Dernière intervention 25 janvier 2013 - 20 avril 2012 à 13:59
Bonjour,

j'ai ajouté deux méthodes à la classe Object dans mon code
Object.prototype.Equals = function(object){
    (...)
};

Object.prototype.indexOf = function(element){
    (...)
};




Le problème, c'est que maintenant, lorsque je veux parcourir les propriétés d'un objet, il intègre également ces deux fonctions dans les résultats de parcours.

Par exemple, avec le code suivant :
var test = {coucou: 1, salut:2, bonjour : 3};
for(var i in test){
    alert(i);
}


j'ai 5 alertes ("coucou", "salut", "bonjour","Equals","indexOf").

Comment faire pour que ces méthodes ne soient pas visibles dans les propriétés de mon objet ?

Merci d'avance
Seb

2 réponses

Zobibol Messages postés 469 Date d'inscription mercredi 9 janvier 2002 Statut Membre Dernière intervention 20 février 2017 6
20 avril 2012 à 12:31
Bien le bonjour, un problème relativement intéressant !
Alors, pour n'avoir que les propriétés et non les méthodes d'un objet, il suffit de tester que ce ne soit pas une fonction, certes, dit comme ça, c'est un peu simpliste, mais la solution l'est tout autant:

   // S'assure que l'attribut tester n'est pas une instance de fonction.
   if (! (test[i] instanceof Function)){
               alert (i);
   }


J'ai été confronté au problème, il n'y a pas très longtemps...

[o-_-o]
0
slecocq Messages postés 2 Date d'inscription vendredi 20 avril 2012 Statut Membre Dernière intervention 25 janvier 2013
20 avril 2012 à 13:59
Bonjour,

Merci beaucoup pour ta réponse aussi rapide. J'avais en effet pensé à cette solution, mais j'aurai voulu l'éviter, parce que j'avais déjà une quantité astronomique de boucles de parcours de mes objets quand j'ai créé ces deux fonctions, et je ne voulais pas me les retaper.

Mais je pense que je n'ai pas le choix. Merci bien.
Seb
0
Rejoignez-nous