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
- Implementation bug for SpiderMonkey Bug 65683