Sto cercando di ottenere il nome della funzione attualmente in esecuzione. Da quello che ho letto, questo dovrebbe essere possibile utilizzando:javascript - arguments.callee.toString() e arguments.callee.name non restituisce il nome della funzione
(arguments.callee.toString()).match(/function\s+(\[^\s\(]+)/)
Tuttavia, quando ho eseguito questo in Firefox e Safari (versioni più recenti su Mac) il nome non viene restituito.
console.log (arguments.callee) restituisce l'origine della funzione, ma non il nome assegnato. arguments.callee.name restituisce una stringa vuota.
mio codice di esempio è il seguente:
var testobj = {
testfunc: function(){
console.log((arguments.callee.toString()).match(/function\s+(\[^\s\(]+)/));
}
}
testobj.testfunc();
Posso chiedere, perché vuoi/devi farlo? – James
Yah. Quindi sto lavorando a un progetto per animali domestici che prevede il concatenamento di funzioni. Ho circa 50 diverse funzioni che eseguono tutti lo stesso codice, tranne per il fatto che una particolare variabile in esse è definita come lo stesso nome della funzione. Voglio ridurre tutta la duplicazione a una singola funzione che rileva il nome della funzione chiamante e usa quel nome come variabile attualmente codificata. Con questo metodo, posso definire tutte le mie funzioni in una singola riga. – Geuis
Le funzioni di '' toString() 'come questo (ovvero la funzione" decompilazione ") hanno le sue verruche. Vedi http://perfectionkills.com/those-tricky-functions/, http://perfectionkills.com/detecting-built-in-host-methods/, http://my.opera.com/hallvors/blog/show .dml/1665828 e http://my.opera.com/hallvors/blog/2007/07/07/prototype-findorstore-considered-harmful –