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 :
- function User( properties ) {
- for ( var x in properties ) { (function(){
- // Create a new getter for the property
- this[ "get" + x ] = function() {
- return properties[x];
- };
- // Create a new setter for the property
- 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()" 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
Merci
Message édité par Profil supprimé le 18-07-2010 à 13:42:28