encore une fois un membre est un membre
c'est donc le comportement statndard
Ce que tu veux c'est un comportement NON standard.
le for in passe par tous les membres (les fonctions internes de JS ne sont pas des membres)
Toi, ce que tu veux, c'est passer en revue les membres et en fonction de la nature de leur valeur agir différemment.
Je ne vois pas ce qui t'empêche de le faire.
Tu fais ça.
1 2 3 4
| var prop1 = 15;
alert(prop1);
var prop2 = function(){};
alert(prop2); |
alors que tu veux faire
1 2 3 4 5 6 7
| var prop1 = 15;
if ('function' != typeof prop1) {
alert(prop1);
}var prop2 = function(){};
if ('function' != typeof prop2) {
alert(prop2);
} |
Je ne vois vraiment pas ce qui t'empêche de le faire.
IL faut que tu te mettes dans la tête qu'un membre d'un objet peut avoir n'importe quel type et que parmi ces types il y a le type fonction. C’est dans la structure du langage.
Pour ce qui est du noyau de l'interprète, ce n'est pas un membre.
Tu peux considérer qu'en JavaScript tout est objet. que chaque nom est en fait une référence à un objet
Ainsi quand tu écris
var o = {a:12,b:'test',c:function(){}};
tu crées un symbole o qui référence un objet
cet objet est constitué de 3 membres ayant chacun un symbole et une valeur
le premier a pour symbole a et référence un objet de type Inetger dont le contenu est 12
le second a pour symbole b et référence un objet de type String dont le contenu est 'test'
Le dernier a pour symbole c et référence un objet de type fonction dont le contenu est une fonction anonyme vide.
Tout est donc parfaitement homogène. Il n'y a donc aucune raison que for in se comporte différemment avec certains membres.
Cela fait partie du langage.
Si tu as déjà travaillé avec d'autres langages à objet tu connais probablement la structure Map (java, C++ etc) ou Tableau associatif de PHP.
o = new HashMap<String, Object>();
tu à l'a une Map dont les clefs sont des string et les valeurs des objets.
Tu peux donc à priori y mettre ce que tu veux. Toute classe dérivant de Object peut être ajoutée à ta Map.
maintenant, imagine une classe
N'importe quelle instance de cette classe peut être ajoutée à ta Map.
si tu fais
1 2 3 4
| for(Entry<String, Object> entry : o.entrySet()) {
object p = entry.getValue();
...
} |
Dis-moi pourquoi le for devrait ne pas te retourner les entrées don la valeur est une instance de la classe Fonction ?
C'est pourtant ce que tu demandes.
Et tu dis Oui, mais les fonctions internes elles ...
Dans ce code Java la méthode entrySet ou la propriété length font-elles partie de la liste des valeurs de ta Map ?
Le For in parcours tous les membres et que les membres sans aucune distinction de valeurs.
Si tu veux faire des actions différentes en fonction du type de valeur libre à toi de le faire.
A+JYT
Partager