2009-08-26 17 views

Antwort

15

Für jede Funktion ist eine caller-Eigenschaft definiert.

Von https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Function/caller:

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

Die Function.caller Eigenschaft ist nicht Teil des ECMA3 Standard, aber es ist in allen gängigen Browsern, einschließlich Internet Explorer und Firefox implementiert.

Wenn Sie eine anonyme Funktion verwenden, können Sie immer noch Zugriff auf das caller Eigenschaft über die arguments.calee Eigenschaft:

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

Beachten Sie, dass dieser Code die aktuelle Funktion zugreift, und Referenzierung dann die gleiche Nicht-Standard caller Eigentum darauf. Dies unterscheidet sich von der Verwendung der veraltetenarguments.caller Eigenschaft direkt, die nicht implementiert in einigen modernen Browsern ist.

+2

Beachten Sie, dass "Caller" eine nicht standardmäßige Eigenschaft ist. Ihr Kilometerstand kann von Browser zu Browser variieren. –

+0

Wird das auch in IE funktionieren? –

+0

Nicht Standard-Eigenschaft in der Tat, aber gibt es etwas ähnliches in IE? Es sollte nur in IE für meinen Client funktionieren, Firefox wird nicht unterstützt. –

0

In chromeos auf cr-48 gibt arguments.callee.caller den gesamten Funktionskörper als Zeichenfolge für beide anonyme Anruferfunktionen an.

+0

als, wie man den Namen des Anrufers bekommt? –