J'ai écrit une petite fonction introspective, un peu pour débugger, mais surtout pour m'exercer et par curiosité
Elle affiche dans un simple alert la liste des paramètres passés à la fonction où est placé l'appel, ainsi que l'arbre des appels (callstack, pile d'appels, appelez ça comme vous voulez ^^).
Jusque là, rien de très original, mystique ou bizarre.
Pour l'utiliser il suffit de placer dans une fonction quelconque l'appel suivant :
Code javascript : 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
34
35
36
37
38
39
40
41
42 // affichage de tous les paramètres passés à la fonction ( pour debuggage ) function all(arg) { var mess = "------------------------------------------\n"; mess += "Liste des arguments passés à\nla fonction " + arguments.callee.caller.name + " :\n"; mess += "(sur " + arguments.callee.caller.length + " attendus)\n\n"; for (var i = 0 ; i < arg.length ; i++) { mess += "argument numero " + (i + 1) + " : " + arg[i] + "\n"; } mess = calltree() + "\n" + mess + "\n------------------------------------------\n"; alert(mess); } function calltree() { var mess = "------------------------------------------\n"; mess += "Arbre d'appels :\n\n"; if (document.all) return mess + "(indisponible pour IE)"; var root = arguments.callee.caller.caller; var t = new Array(); while (root) { t.push(root.name); root = root.caller; } for (var i = (t.length - 1); i >= 0; i--) { for (var ii = 0; ii < ((t.length - 1) - i); ii++) { mess += " "; } mess += "appel n°" + ((t.length) - i); if (i == (t.length - 1)) mess += " (racine)"; mess += " : " + t[i] + "\n"; } return mess; }
Je l'ai testée : elle marche très bien. (edit : petit oubli : pas complètement sous IE pour le moment )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 all(arguments);
Par contre, je voudrais y ajouter une amélioration sans y parvenir pour le moment :
---> voir ma question du titre : "Est-il possible de récupérer les arguments muets d'une fonction ?"
Ce que je voudrais, c'est accéder aux identificateurs utilisés pour nommer les arguments dans la signature de la fonction.
Exemple, dans ce bout de code imaginaire :
Je sais récupérer le nom de la fonction, à savoir la chaîne "afficher", mais comment récupérer les chaines "nom", et "score" (attention nous sommes bien d'accord : je ne parle pas du nom "bebert" et du score "122" qui sont les valeurs passées ponctuellement à tel appel...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 function afficher(nom, score) { // ... }
Si quelqu'un a un début de piste, une idée géniale ou autre...
...en tout cas merci de m'avoir lu jusque ici ^^
Partager