2012-02-23 17 views
6

diciamo che ho una funzione:Get nome della funzione dall'interno stesso

function test1() { 

     } 

Voglio tornare "test1" dal di dentro se stesso. Ho scoperto che puoi fare arguments.callee che restituirà l'intera funzione e poi eseguirai un po 'di espressione regolare. Qualche modo migliore?

E le funzioni di namespace?

è possibile per ottenere il loro nome così: es .:

var test2 = 
{ 
foo: function() { 
    } 
}; 

voglio tornare foo per questo esempio da dentro di sé.

aggiornamento: per arguments.callee.name Chrome restituisce vuoto, IE9 restituisce undefined. e non funziona con le funzioni con scope.

+1

possibile DUP http://stackoverflow.com/questions/2648293/javascript-get-function-name – ajax333221

+0

possibile duplicato di [Ha funzione javascript conosce il suo nome] (http: //stackoverflow.com/questions/5599513/does-javascript-function-know-its-name) e [Ottieni il nome della funzione in javascript] (http://stackoverflow.com/q/3178892/218196). –

risposta

8
var test2 = { 
    foo: function() { 
    } 
}; 

Non si assegna un nome alla funzione. Stai assegnando la proprietà foo di test2 a una funzione anonima.

arguments.callee.name funziona solo quando le funzioni vengono dichiarate utilizzando la sintassi .

Questo dovrebbe funzionare:

var test2 = { 
    foo: function foo() { 
     console.log(arguments.callee.name); // "foo" 
    } 
}; 
+4

Vale la pena notare che 'arguments.callee' e' arguments.caller' sono deprecati. –

+1

E si noti che quando viene eseguita la funzione non sa che "appartiene" a 'test2'. (Poiché non "appartiene", è solo che 'test2' ha una proprietà' foo' che fa riferimento alla funzione, potresti creare altri riferimenti alla stessa funzione.In base a come lo chiami _may_ hai un "questo" riferimento a quell'oggetto.) – nnnnnn

+1

Errore in IE 8 e versioni precedenti, ecco una buona analisi di [espressioni di funzioni con nome] (http://kangax.github.com/nfe/) e perché non sono una buona idea . – RobG

Problemi correlati