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 :

Comment connaître la méthode appelante


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 12
    Par défaut Comment connaître la méthode appelante
    Bonjour,

    Pour tracer les erreurs de mes scripts JS, je suis en train de passer tout mon code en try/catch. Dans le catch, j'appelle une fonction qui affiche l'exception levée de manière propre.

    Je voudrais savoir comment connaître, dans cette fonction, le nom de la fonction appelante, un peu à la manière de debug_backtrace() de php.

    J'ai essayé "arguments.caller", mais j'obtiens une chaine vide. Pouvez-vous m'aider ?

    Merci

  2. #2
    Membre Expert
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Par défaut
    -> faits des objets!
    (pub ->recherche sur prototype)

  3. #3
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 12
    Par défaut
    Bonjour,

    1. J'ai du nouveau. J'ai remplacé "arguments.caller" par "[nom_de_ma_fonction].caller". Cela renvoie le code complet de la fonction appelante. Avec une regex, j'arrive à récupérer le nom de la fonction. Ca marche *dans certains cas" (voir 2.) mais c'est un peu bof.

    2. Ma fonction s'appelant TraceError, je distingue 2 cas :
    1.a : Quand ma fonction TraceError est appelée par une autre fonction (par défaut en js, rattachée à l'objet "window"), j'obtiens bien le nom de la fonction appelante via une regex sur le contenu renvoyé par "TraceError.caller".
    1.b : Quand ma fonction TraceError est appelée par la méthode d'une classe (au passage, j'utilise le framework prototype), "TraceError.caller" ne renvoie que le contenu de la méthode, son nom est absent. Je n'arrive donc pas à récupérer le nom de la fonction. C'est le cas que je rencontre le plus

    3. Pouvez-vous expliciter votre piste.
    -> faits des objets!
    Merci

  4. #4
    Membre Expert
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Par défaut
    Fais des erreur avec des attributs des noms de fontion des fonctions appelantes des types d'erreurs...

    ou plus simple : un boucle!
    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
    <div id="titi">	</div>
     
    f1();
    function f1(){
    f2();
    }
    function f2(){
    f3();
    }
    function f3(){
    f4();
    }
    function f4(){
    printCaller();
    }
     
    function printCaller(){
     
    functionCaller=printCaller.caller;
    texte="";
     
    while(functionCaller!=null){
    texte+="fct call by : "+functionCaller+"<br/>";
    functionCaller=functionCaller.caller;
     
    }
    document.getElementById("titi").innerHTML=texte;
    }

  5. #5
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 12
    Par défaut
    Merci pour votre réponse.

    En ce qui concerne les noms de fonction, pas de problème. Par contre, lorsqu'il s'agit d'une méthode d'une classe qui appelle, je n'arrive pas à avoir son nom. Avez-vous une solution ?

    ermci

  6. #6
    Membre Expert
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Par défaut
    Comme tu utilise prototype,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var Class = {
      create: function() {
        return function() {
          this.initialize.apply(this, arguments);
        }
      }
    }
    tu peux initialiser la première class à partir de initialize ou modifier la methode create pour initialiser toutes tes fonction descendante avec son nom...!

    ps : Le plus simple c'est encore d'utiliser firebug!

Discussions similaires

  1. Réponses: 7
    Dernier message: 03/04/2008, 10h40
  2. Réponses: 2
    Dernier message: 05/06/2004, 11h56
  3. Réponses: 5
    Dernier message: 15/04/2004, 13h24
  4. Comment connaître son IP derrière un routeur ?
    Par momox dans le forum C++Builder
    Réponses: 2
    Dernier message: 22/02/2004, 18h24
  5. Comment connaître le nom de l'ordinateur ?
    Par M.Dlb dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 30/08/2003, 23h03

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