javascript - arguments.callee.toString () und arguments.callee.name gibt den Funktionsnamen nicht zurück

8

Ich versuche den Namen der aktuell laufenden Funktion zu erhalten. Nach dem, was ich gelesen habe, sollte dies möglich sein mit:

%Vor%

Wenn ich dies jedoch in Firefox und Safari (neueste Versionen auf Mac) ausführe, wird der Name nicht zurückgegeben.

console.log (arguments.callee) liefert die Quelle der Funktion, aber nicht den zugewiesenen Namen. arguments.callee.name gibt eine leere Zeichenfolge zurück.

Mein Beispielcode lautet wie folgt:

%Vor%     
Geuis 20.12.2009, 11:03
quelle

8 Antworten

7

Die typischen arguments.callee-Hacks funktionieren hier nicht, weil dem, was Sie getan haben, eine anonyme Funktion als Wert für den 'testfunc'-Schlüssel des Objekts zugewiesen wird. In diesem Fall wird das Hacken sogar noch schlimmer, aber es kann wie folgt gemacht werden:

%Vor%     
George Jempty 12.02.2010, 21:06
quelle
10

Sie haben eine anonyme Funktion mit

deklariert %Vor%

Sie sollten es als

deklarieren %Vor%

um den Namen zu drucken.

    
Eric Bréchemier 20.12.2009 11:59
quelle
3

Auf Firefox 3.5, Safari 5 und Chrome 6.0 können Sie Folgendes verwenden:

%Vor%

Sie können die Funktion, die die aktuelle aufgerufen hat, auch mit arguments.callee.caller erhalten.

    
Ben Clayton 20.10.2010 11:04
quelle
2
%Vor%

Was ist mit dem Backslash vor [ ? Ich glaube nicht, dass Sie hier eine wörtliche eckige Klammer haben wollen. Ohne das sollte es funktionieren.

Obwohl ich stark empfehle, nichts mit dem Namen der Schnüffelfunktion zu tun oder vor allem mit der Funktion des Schnüffelns. Fast alles, was Sie mit diesen scheußlichen Hacks machen könnten, wird besser mit einer Kombination von Closures und Lookups durchgeführt.

    
bobince 20.12.2009 13:54
quelle
2

Ich denke, es gibt eine viel sauberere und elegante Lösung für all das. Angenommen, die Funktion ist Mitglied eines übergeordneten Objekts - und das wird immer der Fall sein, selbst wenn der Eigentümer der Funktion "window" oder ein anderes globales Objekt ist, können wir über das this keyword, wir können die Funktion selbst über arguments.callee aufrufen und über für (var o in diesem) auf alle Objektnamen der Eltern zugreifen. also sollten Sie in der Lage sein, die gewünschten Informationen relativ einfach zu erhalten, wie ...

%Vor%

Das sollte robust sein und irgendwelche seltsamen IE-Browser-Verhaltensweisen beim Zugriff auf benannte Funktionen, etc. vermeiden.

    
Murray Todd Williams 25.08.2011 14:30
quelle
1
%Vor%     
yckart 19.02.2013 16:29
quelle
0

Zunächst hat die Funktion keinen Namen. Der Funktionsname ist das, was Sie zwischen function und der Argumentenliste (...) eingeben. So erhalten Sie den Namen einer Funktion (verwenden Sie nicht die Eigenschaft name , da sie geändert werden kann):

%Vor%     
Eli Grey 20.12.2009 14:32
quelle
0

Ich fand, dass wenn Sie einfach das Funktionsobjekt wie folgt protokollieren:

%Vor%

oder

%Vor%

, dass Sie einfach den Funktionsnamen im Konsolenprotokoll mit einigen Optionen erhalten.

    
Dave Van den Eynde 24.02.2010 13:12
quelle

Tags und Links