Ca arrive même aux meilleurs ;)
Version imprimable
Bonjour,
Ce code est à mon sens vraiment TRES intéressant... Je compte bien l'utiliser par moments. Je n'ai qu'une interrogation. Il fait appel à des éléments Javascript dépréciés (arguments.callee.caller). D'où mes questions :
- Connaissez-vous un moyen de réaliser la même chose sans ces éléments dépréciés ?
- A défaut, quel risque à moyen terme y aurait-il à inclure cette fonction dans certains développements ? Risque-t-on de se retrouver avec des erreurs sur certains navigateurs ?
Heureux que ce bout de code puisse t'être utile :oops:
A propos des éléments depréciés : je n'avais pas vu ça début 2009 quand j'ai écrit ce code... :? Peut-être qu'ils l'étaient déjà, peut-être pas... je l'ignore... en tout cas : il va falloir que je vérifie.
Merci de l'info, le premier qui trouve quelquechose qui peut faire avancer l'affaire... a le droit de le poster ici je ne serai même pas fâché :mrgreen:
enfin quoique ... si j'en crois Mozilla
https://developer.mozilla.org/fr/R%C...guments/calleeCitation:
JavaScript 1.4 : callee est obsolète en tant que propriété de Function.arguments, et devient une propriété de la variable locale arguments propre à chaque fonction.
en outre Safari 4 ne semble pas supporter
arguments.callee.caller
Bref, pas simple, je continue
Edit -------------------------------
Cela semble finalement bon pour callee, mais pas pour caller ? :oops:
https://developer.mozilla.org/En/Cor...cope/arguments
Pour caller, cela semble implémenté en Javascript 1.5 pour les moteurs SpiderMonkey (cf. les navigateurs Mozilla) et JScript sous la forme suivante :
Source : https://developer.mozilla.org/en/Cor...unction/callerCode:
1
2
3
4
5
6
7
8 ma fonction1 () { alert(mafonction.caller); } mafonction2 (){mafonction1();} mafonction2(); //affiche mafonction1
Mais ce n'est pas standard. C'est sans doute pourquoi d'autres moteurs comme celui de Safari4 semblent ne plus l'implémenter.
La question rebondit donc. Comment identifier la fonction appelante d'une autre fonction en respectant les standard.
La version actuelle de javascript est basée sur la 3ème édition du standard Ecmascript (qui date de 99 et qui définit "callee" mais pas "caller").
La propriété "caller" n'apparait que dans la 5ème édition du standard, qui date de ... septembre dernier. Donc il va falloir attendre un peu avant que tous les navigateurs l'intègrent.