classe abstraite, paquetage javascript.
Bonsoir. Apres avoir suivi le tutorial sur la programmation objet en javascript
http://t-templier.developpez.com/tut...vascript-poo1/
http://t-templier.developpez.com/tut...vascript-poo2/
http://t-templier.developpez.com/tut...vascript-poo3/
J'ai effectue des petits tests. Il faut dire que nous etions de ceux la qui faisent du javascript a la script (sans vrament une gestion objet en bas). On va corriger cela. Revenons a mon probleme
Mon premier probleme concerne la notion de classe abstraite:
Partons du faite qu'une classe Mammifere a une une methode abstraite manger
Quant je redefinis la methode abstraite dans la fille avec la notation du genre
Citation:
Vampire.prototype={
manger:function(){
alert("manger la chair humaine");
}
}
ca ne marche pas. il ne vois meme plus la classe de la mere, alors que
alors que
Citation:
Animal.prototype.manger=function(){
alert("manger avec la bouche");
}
marche nickel.
le premiere notation est pratique et permet de regrouper plusieurs fonctions. de plus, c'est la notation a la json. what bad.
Tout l'exemple
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
var Mammifere=function(modeAccouchement){
this.modeAccouchement=modeAccouchement;
}
Mammifere.prototype={
seNourrir:function(){
this.manger();
},
manger:function(){//methode abstraite non encore implémentee
throw new Error("non implémentée!");
}
}
//Une classe fille Animal. Ce cas marche nickel
var Animal=function(modeAccouch){
this.modeAccouchement=modeAccouch;
}
heriter(Animal.prototype, Mammifere.prototype);
Animal.prototype.manger=function(){
alert("manger avec la bouche");
}
lion=new Animal("tombe enceinte");
lion.seNourrir();
//Ce exemple ci ne marche pas. Il met dracula.seNourrir() is not a function
//Vous remarquez que la seule différence avec la classe Animal,
//c'est Vampire.prototype= plutot que
//Animal.prototype.manger=function(). What bad
var Vampire=function(modeAccouch){
this.modeAccouchement=modeAccouch;
}
heriter(Vampire.prototype, Mammifere.prototype);
Vampire.prototype={
manger:function(){
alert("manger la chair humaine");
}
}
dracula=new Vampire("se duplique");
dracula.seNourrir(); |
--------------------------------------------------
Le deuxieme concerne la notion de paquetage. je n'arrive pas a faire un paquetage interne du genre OUEX.Utils.init();
Un exemple concret.
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
//Ce cas marche nickel
var DOMX=window.DOMX || {};
DOMX=function(){
var moveComponent=function(){//Cette fonction n'est visible que dans le package
alert("deplacement de composant");
};
return{
init:function(){
alert("initialisation");
moveComponent.apply(null,arguments);
},
rien:function(){
alert("rien a l'horizon");
}
}
}();
//NAMESPACE (a voir)
//Execution de l'initialisation
DOMX.init();
DOMX.rien();
//Par contre, celui ci ne passe pas. il me met OUEDX.Utilities.init() is
//not a function
var OUEDX=window.OUEDX || {};
OUEDX=function(){
//////////////////////////////////Debut paquetage
//private
var Utils={};
Utils=function(){
var fonccombo=function(){
}
fonccombo.prototype.afficherCombo=function(){
alert("mon combo est affiche");
}
//public pour OUEDX.Utilities
return{
init:function(){
alert("init du combo");
}
}
////////////////////////////////////Fin packetage OUEDX.Utils
}();
//public
return{
Utilities:function(){
return Utils;
}
}
////////////////////////////////////Fin packetage OUEDX
}();
OUEDX.Utilities.init(); |
J'espere compter sur vous, car je dois commencer l'ecriture d'une api javascript et je veux utiliser ces bons concepts.
:king: pour les tutoriaux