Ist das möglich:
myfile.js:
function foo() {
alert(<my-function-name>);
// pops-up "foo"
// or even better: "myfile.js : foo"
}
Ich habe die Dojo- und jQuery-Frameworks in meinem Stack. Wenn eines dieser Frameworks es einfacher macht, sind sie verfügbar.
javascript
jquery
dojo
Sprugman
quelle
quelle
arguments.callee
dies im strengen Modus nicht zulässig ist.Für nicht anonyme Funktionen
Aber im Falle eines Fehlerbehandlers wäre das Ergebnis der Name der Fehlerbehandlungsfunktion, nicht wahr?
quelle
Alles was Sie brauchen ist einfach. Funktion erstellen:
Danach verwenden Sie, wann immer Sie möchten, einfach:
quelle
function getFuncName() { return getFuncName.name }
getFuncName
und nicht den Namen des Anrufers.Laut MDN
Wie bereits erwähnt, gilt dies nur, wenn Ihr Skript den "strengen Modus" verwendet. Dies ist hauptsächlich aus Sicherheitsgründen und leider gibt es derzeit keine Alternative dafür.
quelle
Dies sollte es tun:
Verwenden Sie für den Anrufer einfach
caller.toString()
.quelle
[
Dies muss in die Kategorie der "hässlichsten Hacks der Welt" gehen, aber los geht's.
Drucken Sie zuerst den Namen des aktuellen scheint mir das Funktion (wie in den anderen Antworten) nur eine begrenzte Verwendung zu haben, da Sie irgendwie bereits wissen, was die Funktion ist!
Das Herausfinden des Namens der aufrufenden Funktion kann jedoch für eine Ablaufverfolgungsfunktion sehr nützlich sein. Dies ist mit einem regulären Ausdruck, aber die Verwendung von indexOf wäre etwa dreimal schneller:
quelle
Hier ist ein Weg, der funktionieren wird:
Dann in Ihren Tests:
Beachten Sie, dass der dritte Test nur funktioniert, wenn sich der Test in / util / functions befindet
quelle
Die
getMyName
Funktion im folgenden Snippet gibt den Namen der aufrufenden Funktion zurück. Es ist ein Hack und basiert auf nicht standardmäßigen Funktionen :Error.prototype.stack
. Beachten Sie, dass das Format der von zurückgegebenen ZeichenfolgeError.prototype.stack
in verschiedenen Engines unterschiedlich implementiert ist, sodass dies wahrscheinlich nicht überall funktioniert:Über andere Lösungen:
arguments.callee
nicht im strikten Modus erlaubt undFunction.prototype.caller
ist nicht-Standard und nicht im Strict - Modus erlaubt .quelle
Ein anderer Anwendungsfall könnte ein zur Laufzeit gebundener Ereignis-Dispatcher sein:
Der Vorteil hierbei ist, dass der Dispatcher leicht wiederverwendet werden kann und nicht die Dispatch-Warteschlange als Argument erhalten muss, sondern implizit den Aufrufnamen enthält ...
Am Ende wäre der hier vorgestellte allgemeine Fall "Verwenden des Funktionsnamens als Argument, damit Sie ihn nicht explizit übergeben müssen", und dies könnte in vielen Fällen nützlich sein, z. B. beim optionalen Rückruf jquery animate (). oder in Timeouts / Intervallen Rückrufen (dh Sie übergeben nur einen Funktionsnamen).
quelle
Der Name der aktuellen Funktion und wie sie erhalten werden kann, scheint sich in den letzten 10 Jahren geändert zu haben, seit diese Frage gestellt wurde.
Da ich kein professioneller Webentwickler bin, der alle Historien aller Browser kennt, die jemals existiert haben, funktioniert dies für mich in einem Chrome-Browser von 2019 folgendermaßen:
Einige der anderen Antworten stießen auf Chromfehler in Bezug auf strengen Javascript-Code und so weiter.
quelle
Da Sie eine Funktion mit dem Namen geschrieben haben
foo
und wissen,myfile.js
warum Sie diese Informationen dynamisch abrufen müssen?arguments.callee.toString()
Davon abgesehen können Sie innerhalb der Funktion (dies ist eine Zeichenfolgendarstellung der gesamten Funktion) den Wert des Funktionsnamens neu ausdrücken.Hier ist eine Funktion, die ihren eigenen Namen ausspuckt:
quelle
Eine Kombination der wenigen Antworten, die ich hier gesehen habe. (Getestet in FF, Chrome, IE11)
Durch Aufrufen von randomFunction () wird eine Zeichenfolge benachrichtigt, die den Funktionsnamen enthält.
JS Fiddle Demo: http://jsfiddle.net/mjgqfhbe/
quelle
Eine aktualisierte Antwort darauf finden Sie unter folgender Antwort: https://stackoverflow.com/a/2161470/632495
und wenn Sie keine Lust zum Klicken haben:
quelle
Die Informationen sind aktuell für das Jahr 2016.
Ergebnisse für die Funktionsdeklaration
Ergebnis in der Oper
Ergebnis im Chrome
Ergebnis im NodeJS
Funktioniert nicht im Firefox. Ungetestet auf dem IE und dem Edge.
Ergebnisse für Funktionsausdrücke
Ergebnis im NodeJS
Ergebnis im Chrome
Funktioniert nicht in Firefox, Opera. Ungetestet auf dem IE und dem Edge.
Anmerkungen:
quelle
Typoskript-Variation:
Hinweis Nur bei ES6 / ES2015-kompatiblen Motoren verfügbar. Weitere Informationen finden Sie unter
quelle
Hier ist ein Einzeiler:
So was:
quelle
Dies ist eine Variante von Igor Ostroumovs Antwort:
Wenn Sie es als Standardwert für einen Parameter verwenden möchten, müssen Sie einen Aufruf der zweiten Ebene an 'caller' in Betracht ziehen:
Dies würde dynamisch eine wiederverwendbare Implementierung in mehreren Funktionen ermöglichen.
Wenn Sie auch den Dateinamen möchten, finden Sie hier diese Lösung mit der Antwort von F-3000 auf eine andere Frage:
quelle
Versuchen:
quelle
Die Antwort ist kurz:
alert(arguments.callee.name);
quelle