Bonjour
Je suis entrain de lire un bouquin sur Javascript. Et comme d'hab dans ce genre de livre, le code source qu'il contient ne fonctionne pas....
Le code est le suivant:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 function User( properties ) { for ( var x in properties ) { (function(){ this[ "get" + x ] = function() { return properties[x]; }; this[ "set" + x ] = function(val) { properties[x] = val; }; })(); } } var user = new User({ name: "Bob", age: 44 }); // Just note that the name property does not exist, as it's private // within the properties object alert( user.name == null ); // However, we're able to access its value using the new getname() // method, that was dynamically generated alert( user.getname() == "Bob" ); // Finally, we can see that it's possible to set and get the age using // the newly generated functions user.setage( 22 ); alert( user.getage() == 22 );
En gros c'est tout con. Il cr�e des m�thode, en l'occurrence des getter et setter de fa�on dynamique en fonction des propri�t�s de l'objet pass�es � sa cr�ation.
Alors ca ne marche pas parce qu'il ne reconnait pas la m�thode "getname()".
Logiquement je me suis dit c'est surement � cause de l'encapsulation dans une fonction anonyme. Parce que si j'ai bien compris les fonctions anonymes sont l� pour d�finir le scope des variables, en d'autre terme pour emp�cher que les variables cr��es dans la fonction anonyme soient visibles de l'ext�rieur. Or comme c'est des fonctions dynamiques qu'on y cr�e il me semble normal qu'elles doivent �tre accessible de l'ext�rieur.
Mais voil�, si j'enl�ve la fonction anonyme ca marche mieux, sauf qu'un nouveau probl�me appara�t.
Les fonctions getter et setter existent, ce qui est une bonne chose. Le probl�me c'est que le "getname()" qui normalement devrait me donner la valeur "Bob" me renvoie "44", en d'autre terme la m�me valeur que pour l'�ge.
Alors j'imagine que ca doit �tre un probl�me de r�f�rence mais je vois pas trop o�.
Voil� si quelqu'un pourrait me montrer l'erreur ca serait sympa
Merci![]()
Partager