Nel caso di utilizzo che si sta tentando, è possibile che ci possa essere più di una variabile che contiene la stessa funzione anonima.
cioè, si può andare avanti così:
var F = function(){};
var x = new F();
var x2 = x;
var x3 = x;
var blah = x3;
Così, ora abbiamo più di un nome da cercare. E la prima cosa che ho pensato è di scorrere tutti gli oggetti sotto la finestra e stampare il loro nome che ha lo stesso metodo del valore.
Quindi, si potrebbe pensare a qualcosa di simile:
for each (item in window){
if (myfunc == item){
console.log(/*Somehow print the actual name of the item */)
}
}
Ma, non funziona in questo modo in quanto, ora item
è un'altra variabile, e guardare come non c'è built-in proprietà che dà il nome della variabile. , date un'occhiata a Variable name as a string in Javascript, non che questo aiuti qui, però ...
Quindi, infine, da quando hai menzionato che stai cercando di fare la registrazione degli errori, ho pensato di usare le tracce dello stack. Non so se sarà applicabile nella vostra situazione, può essere ancora un po 'illuminante :)
E questo è come va: (Per essere avvertito, questo è un hack)
var myFunction = function(){
var err = new Error();
console.log(err.stack)
}
myFunction();
volontà uscita qualcosa come:
[email protected] eval code:3:17
@debugger eval code:6:5
@debugger eval code:1:15
E, prendendo che al livello successivo:
var myFunction = function(){
var err = new Error();
console.log(err.stack.split("@")[0])
/* split the stack-trace string and get the first word before @ */
}
myFunction();
Ora, l'output per tale sarà:
myFunction
Quale, infatti è il nome della variabile che detiene la funzione anonima.
Nota: Questa risposta è ispirato alla domanda How can I get a Javascript stack trace when I throw an exception?
hanno provato questo solo in Firefox, c'è una possibilità lo stack-trace potrebbe essere diversa altrove.
Edit: mancato di notare la modifica, questa potrebbe essere necessario la modifica delle dichiarazioni, che spezza il caso d'uso. :(
Mi sono imbattuto in un problema simile con la registrazione degli errori. Nei browser di "Error.stack" verrà incluso il nome del token, è possibile utilizzarlo. – Halcyon
Dai un'occhiata qui http://stackoverflow.com/ questions/332422/how-do-i-get-the-name-of-an-objects-type-in-javascript – Ronnie
Possibile duplicato di [Ottieni nome funzione anonimo] (http://stackoverflow.com/questions/14178305/ get-anonimo-nome-funzione) – whd