Bonjour,

J'aimerais utiliser des getters et des setters en javascript. J'ai écris :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
var MaClass = function() {
    this.attribut;
}
MaClass.prototype = {
    getAttribut: function() {return this.attribut;},
    setAttribut: function(value) {this.attribut = value;}
}
Jusqu'ici, tout va bien. Ca marche impeccable. Le problème vient quand l'un des attribut est aussi l'objet d'une classe :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
var MaClass = function() {
    this.attribut = new Element();
}
MaClass.prototype = {...}
 
var Element = function() {this.core = "truc";}
Element.prototype = {
    getCore: function() {return this.core;},
    setCore: function(value) {this.core = value;}
}
dans ce cas, regardez le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
var objet1 = new MaClass;
 
objet1.getAttribut().setCore("bidule");
 
alert(objet1.getAttribut().getCore();}
//alert : truc
Evidemment, ce n'est pas ce qui était attendu.
Il existe bien une solution naïve pour régler le problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
objet1.setAttribut(objet1.getAttribut().setCore());
Vous vous doutez bien que ce n'est pas satisfaisant, surtout que plus on va ajouter des niveaux, plus ça deviendra intenable. Imaginez que "core" soit aussi un objet !

Question : existe-t-il un autre moyen de régler ce problème?