Function.caller

Kein Standard
Diese Funktion entspricht nicht dem Standard und ist nicht Teil der Standardisierung. Diese Funktion darf nicht in Webseiten, die via das Internet zug├Ąnglich sind, benutzt werden: Sie wird nicht f├╝r alle Nutzer funktionieren. Es kann zu umfangreichen Inkompatibilit├Ąten zwischen verschiedenen Implementierungen kommen und die Funktionsweise oder Eigenschaften k├Ânnten in der Zukunft ver├Ąndert werden.

Die function.caller Eigenschaft gibt die Funktion zur├╝ck, die eine spezifizierte Funktion aufgerufen hat. Diese Eigenschaft ist im Strict-Modus wegen tail call Optimierungen verboten.

Beschreibung

Wenn die Funktion f durch einen Quelltext auf h├Âchster Ebene aufgerufen wird, ist der Wert von f.caller null, anderfalls die Funktion, die f aufgerufen hat.

Diese Eigenschaft ersetzt die veraltete Eigenschaft arguments.caller des arguments Objektes.

Die spezielle Eigenschaft __caller__, welches das Objekt des Aufrufers zur├╝ck gab, erlaubt es den Stack zu rekonstruieren und wurde aus Sicherheitsgr├╝nden entfernt.

Hinweise

Im Fall von Rekursion, kann der Stack nicht mit dieser Eigenschaft reproduziert werden. Gegeben:

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

Im Moment, indem stop() aufgerufen wird, ist der Aufruferstack:

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

Das folgende ergibt true:

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

Wenn man versucht den Stacktrace in der stop() Funktion zu bekommen, wie hier:

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

wird die Schleife nie beendet.

Beispiele

Pr├╝fen des Wertes der Funktionseigenschaft caller

Der folgende Quelltext pr├╝ft den Wert der Funktionseigenschaft caller.

function myFunc() {
  if (myFunc.caller == null) {
    return 'The function was called from the top!';
  } else {
    return 'This function\'s caller was ' + myFunc.caller;
  }
}

Spezifikationen

In keiner Spezifikation enthalten. Implementiert in JavaScript 1.5.

Browserkompatibilit├Ąt

BCD tables only load in the browser

Siehe auch