2010-01-29 18 views
19

¿Cómo es posible aprender el nombre de la función en la que me encuentro?¿Cómo puedo obtener el nombre de la función dentro de una función de JavaScript?

El siguiente código alerta 'Objeto'. Pero necesito saber cómo alertar a "Exterior".

function Outer(){ 

    alert(typeof this); 

} 
+0

Tengo curiosidad, ¿En qué circunstancias el nombre de la función que está en realidad no la escrita en el código? – bryantsai

+0

@bryantsai: 'ventana [window.prompt ('Nombre de función:', '')] = función() {alerta (arguments.callee.name); }; ' – Boldewyn

Respuesta

16

creo que se puede hacer eso:

var name = arguments.callee.toString(); 

Para obtener más información sobre esto, echar un vistazo 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

desafortunadamente' arguments.callee' está en desuso, pero dado que ECMA aún no ha definido ningún sustituto, este es el camino a seguir. – Boldewyn

+0

@boldewyn: después de más búsquedas también vi eso. Pero, aunque está en desuso, todavía funciona en la mayoría de los navegadores. Y como dijiste, no hay otra alternativa ... ^^ – marcgg

+1

@Boldewyn, 'arguments.callee' no está en desuso. Cuando el modo estricto está habilitado, acceder a él provocaría TypeError. – bryantsai

15

Esto funcionará:

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

esta es la respuesta correcta, en lugar de la respuesta elegida. –

Cuestiones relacionadas