oui c'est normal qu'elle soit executée deux fois ta méthode je m'explique :
var x = new X();
ceci fait afficher la première popup, mais pourquoi me demanderas-tu ;o)
simplement parce que tu as définit
function X() {
this.init();
}
le fait de faire un new X() instancie donc ta méthode (c'est space mais bon),
or, l'interpreteur considère que tout ce qui est dans la méthode X() fait partit du constructeur.
ainsi, lors de l'interprétation de new X(), il execute le contenu de la méthode X (notament init()).
je ne sais pas si c'est assez clair !
j'avoue avoir eu du mal à appréhender au début cette syntaxe mais cela ouvre des portes non négligeable au possiblité qu'offre JavaScript.
Pourquoi ton objet X est instancié par init ? S'il hérite du modèle de Y, tu n'as pas besoin de redefinir la fonction init() dans X.
Tu cherches à faire quelque chose de précis ?
Bonjour, pourrais tu préciser ce que tu entends par
" Avez vous des explications concernant la syntaxe utilisée pour déclarée init dans la classe X?" tu veux surclasser la méthode init de Y dans X ?
un petit exemple
function Y() {
this.init = function() {
return "appel de la méthode init() de Y";
};
}
function X() {
this.init= function (){
// this.__proto__.init() appel la méthode init de la classe mère
var ret = "appel de la méthode init() de X " + this.__proto__.init();
alert(ret);
};
}
X.prototype = new Y();
function testX(){
// Tout passe bien
var x = new X();
// La méthode init() est évoquée une fois.
x.init();
Voilà après un peu de nicotine dans le poumon, un exemple un peu plus "parlant"
function PourTest(){
this.showMessage = function (_message){
alert (_message);
}
}
function PourTestMessage(){
this.showMessage("instance (new PourTestMessage())");
}
PourTestMessage.prototype = new PourTest();
var message = new PourTestMessage();
message.showMessage("instance ok");
il va donc y avoir deux message :
le premier : "instance (new PourTestMessage())" appelé lors du new PourTestMessage();
et le second "instance ok" appelé lors du message.showMessage("instance ok");
et voilà donc l'origine des deux popup !