Bonjour à tous,
j'ai consulté le tuto Programmation orientée objet avec le langage JavaScript de Thierry Templier où bon nombre de notions sont abordées ... sauf peut-être une (ou alors ai-je mal compris quelque chose).
Mon but est simple : créer un objet avec des attributs publiques, et d'autres privés. Je voudrais également pouvoir accéder à ces données depuis des méthodes publiques.
D'après le tuto, pour créer des attributs publiques et des méthodes publiques, il suffit de procéder comme suit :
Jusque là ça va ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 MaClasse = function _maClasse() { this.attribut = "valeur"; if( typeof MaClasse.initialized == "undefined" ) { MaClasse.prototype.maMethode = function() { alert("Attribut: " + this.attribut); }; MaClasse.initialized = true; } };
On nous dit également que si l'on veut réduire la portée de certaines variables, il "suffit" de procéder ainsi :
Tout bêtement, je me suis donc dit, pour combiner les deux, il suffit de procéder de la sorte :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 MaClasse = function _maClasse() { var _maVarPrivee = "privee"; };
et, puisque je suis là, vous comprenez bien que ça ne fonctionne pas ainsi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 MaClasse = function _maClasse() { var _attribut = "valeur"; if( typeof MaClasse.initialized == "undefined" ) { MaClasse.prototype.maMethode = function() { alert("Attribut: " + this._attribut); }; MaClasse.initialized = true; } };
D'abord, pour avoir accès à l'attribut, il faut, contrairement à ce que j'ai écrit ici, utiliser le code suivant (pas de this.) :
Du coup en procédant ainsi, _attribut se comporte plus comme une variable statique (au sens du C). Elle est initialisée à la création du premier objet, et puis c'est tout.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 MaClasse = function _maClasse() { var _attribut = "valeur"; if( typeof MaClasse.initialized == "undefined" ) { MaClasse.prototype.maMethode = function() { alert("Attribut: " + _attribut); }; MaClasse.initialized = true; } };
Ma question est donc : comment faire pour que _attribut soit propre à chaque instance, et que le _attribut utilisé dans ma méthode maMethode soit bien celui de l'instance courante ?
Par avance, merci à quiconque pourra m'aider
Partager