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 :
jeu d'essai :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager