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

Update compatibility data on GitHub
OrdinateurMobileServeur
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebview AndroidChrome pour AndroidEdge MobileFirefox pour AndroidOpera pour AndroidSafari pour iOSSamsung InternetNode.js
Support simple
Non-standard
Chrome Support complet OuiEdge Support complet OuiFirefox Support complet 1IE Support complet 8Opera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet OuiFirefox Android Support complet 4Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Ouinodejs Support complet Oui

Légende

Support complet  
Support complet
Fonctionnalité non-standard. Celle-ci peut être incorrectement supportée par les autres navigateurs.
Fonctionnalité non-standard. Celle-ci peut être incorrectement supportée par les autres navigateurs.

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,