Non standard
Cette fonctionnalité n'est ni standard, ni en voie de standardisation. Ne l'utilisez pas pour des sites accessibles sur le Web : elle ne fonctionnera pas pour tout utilisateur. Il peut également y avoir d'importantes incompatibilités entre les implémentations et son comportement peut être modifié dans le futur.

La propriété function.caller renvoie la fonction qui a appelé la fonction donnée. Cette propriété est interdite en mode stricte à cause de l'optimisation de la queue des appels.

Description

Si la fonction f a été invoquée par du code situé au plus haut niveau, la valeur de f.caller sera null, sinon, ce sera la fonction qui a appelé f.

Cette propriété remplace la propriété obsolète arguments.caller de l'objet arguments.

La propriété spéciale __caller__ qui renvoyait l'objet qui dans lequel était fait l'appel a été supprimée pour des raisons de sécurités.

Notes

Dans une fonction récursive, cette propriété ne peut pas être utilisée pour reconstituer la pile d'appels (call stack). Par exemple, si on a :

function f(n) { g(n - 1); }
function g(n) { if (n > 0) { f(n); } else { stop(); } }
f(2);

Au moment où stop() est appelé, la pile sera :

f(2) -> g(1) -> f(1) -> g(0) -> stop()

Et ceci est vrai :

stop.caller === g && f.caller === g && g.caller === f

Donc si on essaie d'obtenir la pile de cette façon :

var f = stop;
var stack = 'Stack trace:';
while (f) {
  stack += '\n' + f.name;
  f = f.caller;
}

la boucle ne s'arrêterait jamais.

Exemples

Vérifier la valeur de la propriété caller

Dans l'exemple suivant, on verifie la propriété caller de la fonction.

function maFonction() {
  if (maFonction.caller == null) {
    return 'Fonction appelée au plus haut niveau !';
  } else {
    return 'Fonction appelée par ' + maFonction.caller;
  }
}

Spécifications

Ne fait partie d'aucune spécification. Implémentée avec JavaScript 1.5.

Compatibilité des navigateurs

FonctionnalitéChromeEdgeFirefoxInternet ExplorerOperaSafari
Support simple Oui Oui18 Oui Oui
FonctionnalitéAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Support simple Oui Oui Oui4 Oui Oui Oui

Voir aussi

  • Le bug d'implémentation pour SpiderMonkey bug 65683

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : SphinxKnight, teoli, Jeremie, Arzach, BenoitL
 Dernière mise à jour par : SphinxKnight,