Określa funkcję, która powołuje się na aktualnie wykonywaną funkcje.
Ta własność nie jest częścią standardu ECMA-262 edycja 3. Zaimplementowana w najmniejszym stopniu jest w SpiderMonkey (JavaScriptowy silnik użyty w Mozilli) (zobacz błąd 65683) i JScript.
Własność obiektu: Function
Opis
Jeśli funkcja f została wywołana przez kod najwyższego poziomu, własność f.caller ma wartość null, w przeciwnym przypadku jest to funkcja, która wywołała f.
Ta własność zastąpiła wycofaną własność arguments.caller.
Notacja
Zauważ, że w przypadku rekonstrukcji, nie możesz zrekonstrułować właściwości
Rozważmy:
function f(n) { g(n-1) }
function g(n) { if(n>0) f(n); else stop() }
f(2)
w tym momencie stop() nazywa sie stosem wywołania:
f(2) -> g(1) -> f(1) -> g(0) -> stop()
Ponieższe stwierdzenie jest prawdą:
stop.caller === g && f.caller === g && g.caller === f
jeśli sprubujesz uzyskać ślad stosu w funkcji stop() będzie ona taka jak:
var f = stop;
var stack = "Stack trace:";
while (f) {
stack += "\n" + f.name;
f = f.caller;
}
pętla nigdy sie nie zatrzyma.
The special property __caller__, which returned the activation object of the caller thus allowing to reconstruct the stack, was removed for security reasons.
Przykłady
Przykład: Sprawdzenie wartości własności funkcji caller
Następujący kod sprawdza wartość własności funkcji caller.
if (myFunc.caller == null) {
return ("The function was called from the top!");
} else
return ("This function's caller was " + myFunc.caller);
}
Listing
Ranga: Administrator serwisu Punktów: 0