IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

passer une fonction dans un parametre d'une propriété de classe


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 235
    Par défaut passer une fonction dans un parametre d'une propriété de classe
    Bonjour (oui je sais il est tard mais je trouve pas de solution à mon problème ) ...

    bon un petit exemple qui illustre mon problème :

    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
    29
    30
    31
    32
    33
    <html>
    <head>
    <script type='text/javascript'>
    function MyClass(pNom, pPrenom)
    {
    	this.nom = pNom;
    	this.prenom = pPrenom;
    }
     
    function MyClass.prototype.Test(res)
    {
    	alert('ok');
    	alert(this.nom + " " + this.prenom);
    }
     
    function MyClass.prototype.appel(f)
    {
    	alert('appel');
    	f();	
    }
     
    function MyClass.prototype.debut()
    {
    	this.appel(this.Test);
    }
     
    </script>
    </head>
    <body>
    <input type="button" value="test" onclick="var o = new MyClass('le nom','le prenom'); o.debut();" />
     
    </body>
    </html>
    explication : je souhaite que lorsque j'appel une methode de ma classe, celle-ci appel une autre méthode en donnant le nom d'une troisieme autre methode (j'espere que vous m'avez comprit sinon suffit de voir les étappes -> debut -> appel -> Test)

    bref; ce petit test demontre que ma reference "THIS" perd un peu les pedales lorsqu'il tombe dans la methodes Test.
    Du coup, quand je veut faire this.nom et this.prenom il m'affiche "undefined" (j'imagine que THIS refere document ou un truc dans le genre...)

    Cela peut paraitre absurde mais j'ai met raisons; je repete ceci n'est qu'une illustration.

    Si quelqu'un peut m'aider à trouver une solution tout en gardant ce principe (methode qui appel une autre methode donner en parametre, le tout dans la meme classe) je vous serai EXTREMEMENT RECONNAISSANT !!!

    sur ce; je vais dormir faire plein de cauchemard

  2. #2
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    La solution simple (lol, une fois qu'elle est programmée) et efficace est l'auto-storing... Le principe est que ta classe se stocke de manière durable et globale et qu'au lieu de faire référence à this, les fonctions fassent référence à la zone de stockage.
    J'ai un code perso unique dans le monde, mais je suis radin (lol)

    Sinon, tu as toujours :
    A) Eval :
    B) La référence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function Invoke (ref, funcName) {
        return ref[funcName]();
    }

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 235
    Par défaut
    mmmh, tout d'abord merci de t'interessé a mon problème

    Je ne comprend pas tres bien ce que tu fais avec eval() et encore moins ce que fait ta fonction Invoke.
    Peut tu m'eclaire par un tout petit exemple complet ?
    Merci beaucoup à toi !

  4. #4
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    A la volée; devrait afficher deux alerts;
    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
    MyClass = function(name, lastName) {
        this.name=name; this.lastName=lastName;
        this.toString=function() {
             return this.lastName.toUpperCase() + " " + this.name;
        }
        this.alert=function() {
             alert(this.toString());
        }
        this.invoke=function(functionName) {
            eval("this." + functionName + "();")
        }
        this.invokeShared=function(ref, functionName) {
            ref[functionName]();
        }
    }
     
    MyClassInstance = new MyClass("Francois", "Remy");
    MyClassInstance .invoke("alert");
    MyClassInstance .invokeShared(MyClassInstance, "alert");

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 235
    Par défaut
    Je viens de lire, tester et comprendre ton exemple qui est vraiment tres interessant ! merci !
    Néanmoins j'ai peur que je sois toujours coincé. Je vois que tu as l'air vraiment bien informé sur le javascript peut etre pourrait tu me dire si mon probleme a une solution !

    Voila, je travaille en ASP.NET et j'utilise un composant libre (AJAXPRO) qui me permet de faire des requetes tres facilement sur mon serveur. bref ceci n'est pas tres important...

    exemple :

    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
    MyClass = function()
    {
       this.nom = "LeNom"
       this.prenom = "LePrenom"
     
       this.CallAjax()
       {
          MaMethodePourFaireRequeteAjax(this.nom, this.prenom, this.EndCallBack);
       }
     
       this.EndCallBack(res)
       {
          //traitement de la reponse
         // quand la requete asynchrone se termine, j'arrive ici avec this qui ne pointe plus sur MyClass
         // note: le parametre "res" est en fait la reponse retourner par le serveur
       }
    }
     
    var monObjet = new MyClass();
    monObjet.CallAjax();
    Voila le probleme se situe au niveau du this.EndCallBack, je perd toujours la reference de ma classe quand j'arrive dans EndCallBack

    j'ai deja essaié au niveau de l'appel de changer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          MaMethodePourFaireRequeteAjax(this.nom, this.prenom, this.EndCallBack);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          MaMethodePourFaireRequeteAjax(this.nom, this.prenom, function(res){this.EndCallBack(res, this)});
    de sorte a ce que j'envoie la reference mais en fait en reflechissant je fait exactement la meme chose et je ne resoud aucunement le probleme

    je ne parviens pas a trouver une solution tout en gardant l'utilisation de la methode ajax dans une classe

  6. #6
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    En utilisant ma méthode d'auto-storing, tu pourrais laisser le code comme présenté, à condition d'effectuer un traitement d'auto-storage...

    Seulement, comme je te l'ai dit, ca nécéssite que tu cherche le code par toi même, vu que je n'ai pas trop envie de donner le mien....

    Sinon, il existe une methode simple (j'avoue que je ne l'aime pas à cause du fait qu'elle partage des variables entres fonctions sans raison) mais qui a fait ses preuves :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var This=this; var callBack=function(res) {
        This.Function(res);
    }
     
    callAJAX(args, callBack);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. passer un tableau php en parametre d'une fonction js
    Par maxwel56 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 21/05/2012, 16h51
  2. mettre un parametre d'une fonction dans un request.setAttribute
    Par john_wili dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/03/2009, 14h34
  3. faire passer une fonction entant que parametre d'une fonction
    Par gali_fr dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/05/2008, 15h18
  4. Réponses: 2
    Dernier message: 26/04/2008, 10h13
  5. Réponses: 6
    Dernier message: 17/10/2006, 09h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo