Heritage de modèles d'objets
débutant en javascript, je cherche à retrouver les fonctionnalités de l'héritage 'à la C++'. J'ai donc, en guise de test, fait cette fonction :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
//fabrique un constructeur pour instancier un objet de type clsEnfant dérivé de clsParent
//version ultra simpliste (pas d'arguments pour les fonctions)
//permet la surcharge de fonctions
//permet d'acceder aux fonction du parent par parent.nomfonction
function heriteDe(clsParent,clsEnfant)
{
function Constructeur() //definition du constructeur
{
this.parent=new clsParent(); //instancier un objet parent
for(var att in this.parent) //parcourir les acctibuts du parent
{
if(typeof this.parent[att]== "function")
{ //definir,depuis l'enfant, une fonction d'acces à la fonction parent
this[att] = eval("function() { this.parent."+att+"();}");
}
else
{ //definir, depuis l'enfant, les getter et setter d'accès à la propriété parent
eval(" this."+att+" getter =function() {return this.parent."+att+"; }; "+
" this."+att+" setter =function(val){this.parent."+att+"=val; } ");
}
}
clsEnfant.apply(this); //appliquer le constructeur du modele enfant
}
return Constructeur;
} |
jeu d'essai :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
function ProtoParent() //'classe' parente
{
this.A=0;
this.C=12;
this.foncA=function() {this.A=this.A+1;}
this.foncC=function() {this.C=this.C+5;}
}
function ProtoEnfant() //'classe' enfant
{
this.B=8;
this.foncB=function() {this.A=this.A+2; this.B=this.B+2;}
//foncC surcharche la fonction parente et fait appel à celle-ci
this.foncC=function() {this.parent.foncC(); this.C=this.C-6; }
}
var Modele=heriteDe(ProtoParent,ProtoEnfant); //creation du modele d'objet
var test= new Modele(); //instanciation de l'objet
alert("A: "+test.A+" B :"+test.B+" C: "+test.C);
test.foncA();
alert("fonction foncA appelée (hérité)A:"+test.A+" B :"+test.B+" C: "+test.C);
test.foncB();
alert("fonction foncB appelée A:"+test.A+" B :"+test.B+" C: "+test.C);
test.foncC();
alert("fonction foncC appelée (surcharge et appel interne de la foncC parent) A: "+test.A+" B :"+test.B+" c: "+test.C); |
si des spécialistes du javascript pouvait me donner leur avis, afin de savoir si la piste envisagée est bonne où s'il y a d'autres directions plus efficaces.
Merci d'avance