Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 2013
-
2 avril 2008 à 11:50
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 2013
-
2 avril 2008 à 21:50
Salut:
J'ai un bout de code:
function X() {
this.init();
}
Lorsque j'instancie la fonction/classe X Firebug m'affiche une erreur:
X.init is not a method
Je me demande si init est vraimant une méthode vide?
Ou bien une sorte de méthode "abstraite"?
En effet, lorsque je rend X une classe fille d'une autre classe Y ayant une méthode init(), tout passe bien.
function Y() {
this.init = function() {
alert("Y::init()");
};
}
function X() {
this.init();
}
X.prototype = new Y();
// Tout passe bien
var x = new X();
// La méthode init() est évoquée deux fois.
x.init();
Avez vous des explications concernant la syntaxe utilisée pour déclarée init dans la classe X?
Merci.
A voir également:
Quel est l’identifiant de l’enregistrement avec une erreur de syntaxe ?
Zobibol
Messages postés469Date d'inscriptionmercredi 9 janvier 2002StatutMembreDernière intervention20 février 20176 2 avril 2008 à 16:41
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.
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 2 avril 2008 à 21:46
Salut:
Désolé pour le dérrangement mes amis.
Il s'avère que j'ai fait une grosse erreur, vu que dans la déclaration:
function X() {
this.init();
}
on fait juste un appel à la méthode init() qui sera héritée par la suite d'une autre classe.
XtremDuke
Messages postés626Date d'inscriptionsamedi 28 septembre 2002StatutMembreDernière intervention18 mai 20094 2 avril 2008 à 14:13
Salut,
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 ?
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 2 avril 2008 à 14:18
Salut:
Il parait qu'il s'agit de la déclaration d'une classe abstraite.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 2 avril 2008 à 14:21
Salut:
J'ai fait le même raisonnement que toi.
Mais c'est un exemple que j'ai lu sur le site de Extjs.
Zobibol
Messages postés469Date d'inscriptionmercredi 9 janvier 2002StatutMembreDernière intervention20 février 20176 2 avril 2008 à 16:02
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();
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 2 avril 2008 à 16:33
Salut:
Zobibol >> Je vais reformuler ma question:
function X() {
this.init();
}
Je me demande pourquoi utilises-t-on cette syntaxe?
Normalement, je me suis habitué à voir la déclaration d'une méthode ou d'un attribut, mais celle-ci me semble totalement différente.
Exécutes mon code et tu vois voir que la méthode init() est appelée deux fois.
Zobibol
Messages postés469Date d'inscriptionmercredi 9 janvier 2002StatutMembreDernière intervention20 février 20176 2 avril 2008 à 16:49
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 !
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 2 avril 2008 à 21:50
Salut:
"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."
C'est ça le gros problème, il faut s'habituer aux mécanismes de JavaScript. Si quelque chose n'est pas déclarée, tu peux le faire par la suite.