[Javascript] Méthode générée dynamiquement

Méthode générée dynamiquement [Javascript] - HTML/CSS - Programmation

Marsh Posté le 18-07-2010 à 13:39:33    

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 :
  1. function User( properties ) {
  2. for ( var x in properties ) { (function(){
  3. // Create a new getter for the property
  4. this[ "get" + x ] = function() {
  5. return properties[x];
  6. };
  7. // Create a new setter for the property
  8. this[ "set" + x ] = function(val) {
  9. properties[x] = val;
  10. };
  11. })(); }
  12. }
  13. var user = new User({
  14. name: "Bob",
  15. age: 44
  16. });
  17. // Just note that the name property does not exist, as it's private
  18. // within the properties object
  19. alert( user.name == null );
  20. // However, we're able to access its value using the new getname()
  21. // method, that was dynamically generated
  22. alert( user.getname() == "Bob" );
  23. // Finally, we can see that it's possible to set and get the age using
  24. // the newly generated functions
  25. user.setage( 22 );
  26. 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()" en ligne 23.
Logiquement je me suis dit c'est surement à cause de l'encapsulation dans une fonction anonyme (en rouge). 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 :D
 
Merci  :hello:


Message édité par Profil supprimé le 18-07-2010 à 13:42:28
Reply

Marsh Posté le 18-07-2010 à 13:39:33   

Reply

Marsh Posté le 14-08-2010 à 02:06:21    

essaie user['getname'] au lieu de user.getname

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed