2010-01-29 15 views
19

Come è possibile conoscere il nome della funzione in cui mi trovo?Come posso ottenere il nome della funzione all'interno di una funzione JavaScript?

Il codice sottostante avvisa 'Oggetto'. Ma ho bisogno di sapere come avvisare "Outer".

function Outer(){ 

    alert(typeof this); 

} 
+0

Sono curioso, in quali circostanze sarebbe il nome della funzione si è in realtà non quello scritto nel codice? – bryantsai

+0

@bryantsai: 'window [window.prompt ('Nome funzione:', '')] = function() {alert (arguments.callee.name); }; ' – Boldewyn

risposta

16

penso che si può fare:

var name = arguments.callee.toString(); 

Per ulteriori informazioni su questo, dare un'occhiata a this article.

function callTaker(a,b,c,d,e){ 
    // arguments properties 
    console.log(arguments); 
    console.log(arguments.length); 
    console.log(arguments.callee); 
    console.log(arguments[1]); 
    // Function properties 
console.log(callTaker.length); 
    console.log(callTaker.caller); 
    console.log(arguments.callee.caller); 
    console.log(arguments.callee.caller.caller); 
    console.log(callTaker.name); 
    console.log(callTaker.constructor); 
} 

function callMaker(){ 
    callTaker("foo","bar",this,document); 
} 

function init(){ 
    callMaker(); 
} 
+2

sfortunatamente' arguments.callee' è deprecato, ma dal momento che ECMA non ha ancora definito alcun sostituto, questa è la strada da percorrere. – Boldewyn

+0

@boldewyn: dopo altre ricerche l'ho visto anche io. Ma mentre è deprecato funziona ancora nella maggior parte dei browser. E come hai detto tu, non c'è alternativa sooooo ... ^^ – marcgg

+1

@Boldewyn, 'arguments.callee' non è solo deprecato. Quando la modalità rigorosa è abilitata, l'accesso a questo causerà TypeError. – bryantsai

15

Ciò funzionerà:

function test() { 
    var z = arguments.callee.name; 
    console.log(z); 
} 
+1

questa è la risposta corretta, invece della risposta scelta. –

Problemi correlati