Simulation de POO : accès aux attributs privés d'un objet
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 :
Code:
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;
}
}; |
Jusque là ça va ...
On nous dit également que si l'on veut réduire la portée de certaines variables, il "suffit" de procéder ainsi :
Code:
1 2 3 4
|
MaClasse = function _maClasse() {
var _maVarPrivee = "privee";
}; |
Tout bêtement, je me suis donc dit, pour combiner les deux, il suffit de procéder de la sorte :
Code:
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;
}
}; |
et, puisque je suis là, vous comprenez bien que ça ne fonctionne pas ainsi.
D'abord, pour avoir accès à l'attribut, il faut, contrairement à ce que j'ai écrit ici, utiliser le code suivant (pas de this.) :
Code:
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;
}
}; |
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.
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