begin process at 2012 05 30 05:06:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Javascript / DHTML / Ajax

 > 

JavaScript Orienté objet (POO)

 > 

Classes

 > 

Syntaxe Etrange


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Syntaxe Etrange

mercredi 2 avril 2008 à 11:50:31 | Syntaxe Etrange

Ombitious_Developper

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.
mercredi 2 avril 2008 à 14:13:06 | Re : Syntaxe Etrange

XtremDuke

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 ?
mercredi 2 avril 2008 à 14:18:43 | Re : Syntaxe Etrange

Ombitious_Developper

Salut:

Il parait qu'il s'agit de la déclaration d'une classe abstraite.
mercredi 2 avril 2008 à 14:21:54 | Re : Syntaxe Etrange

Ombitious_Developper

Salut:

J'ai fait le même raisonnement que toi.

Mais c'est un exemple que j'ai lu sur le site de Extjs.
mercredi 2 avril 2008 à 16:02:39 | Re : Syntaxe Etrange

Zobibol

Membre Club
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();
               
        }



[o-_-o]
mercredi 2 avril 2008 à 16:33:22 | Re : Syntaxe Etrange

Ombitious_Developper

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.
mercredi 2 avril 2008 à 16:41:22 | Re : Syntaxe Etrange

Zobibol

Membre Club
Réponse acceptée !
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.

[o-_-o]
mercredi 2 avril 2008 à 16:49:56 | Re : Syntaxe Etrange

Zobibol

Membre Club
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 !

[o-_-o]
mercredi 2 avril 2008 à 21:46:14 | Re : Syntaxe Etrange

Ombitious_Developper

Réponse acceptée !
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.

Merci beaucoup pour votre coopération.
mercredi 2 avril 2008 à 21:50:06 | Re : Syntaxe Etrange

Ombitious_Developper

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.

Après tout, c'est une lesson à apprendre.


Cette discussion est classée dans : function, classe, méthode, syntaxe, init


Répondre à ce message

Sujets en rapport avec ce message

Comment faire des classes imbriquées [ par diaod8 ] Voila, j'ai un bout de code en javascript, je ne comprend pas pourquoi mes classes imbriqué ne fonctionnent pas, j'aimerais que quelqu'un m'explique.  pb dans code: marche pas [ par nanonerie ] nanonerie      calcul Pb avec un script (menu deroulant vertical) sur IE [ par batmkana ] Bonjour, J'ai un soucis avec un script qui fonctionne sur Firefox, et quelques version d'IE, mais pas les dernières (7. ...)Voici le script :/*======= MOUSE OVER [ par mimosa803 ] salut à tous, je veux réalisé l'événement Mouse over et Mouse out ,mais ca ne fonctionne pas,donc j'éspere que vous m'aider et merci d'avance.Mouse    page unique [ par mimosa803 ] bonsoir à tous , bon j'ai un petit problème: j'ai un liste déroulante nommée"liste" ,je veux que lorsque je séléctionne un chiffre, sa table de multip function non exécutée après contrôle de formulaire [ par cousinlol ] Bonjour, Juste un p'tit truc qui m'échappe J'ai un formulaire, sur lequel je fais un petit contrôle : <table align="center" border="0" cellpaddin Problème avec la méthode String.split() et les "\" [ par Kenshin07 ] Bonjour,je développe un module d'upload, et j'aimerais pouvoir récupérer le nom du fichier sélectionné afin de le mettre dans la value de mon TextBox. Probleme javascript sous firefox [ par abdelilahw3 ] bonjour,j'ai un problème avec le code qui suit, je souhaite l'utiliser avec firefox , mais il ne  marche que sous IEmerci bien de m'aider.< Méthode POST (AJAX) sous Safari [ par eplanet ] Bonjour à tous, voilà mon problème, j'essaie d'utiliser la méthode POST en AJAX, ca marche bien sous Firefox et sous IE (6 et 7), mais pas sous Safari Problème [ par miximog ] Bonjour,J'ai un probleme, j'ai passé toute l'après-midi à éssayer de faire marcher un script que j'ai trouver sur le net. C'est un classe qui est devr


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,764 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales