2011-04-21 15 views
13

Duplicar posible:
Javascript how do you find the caller function?¿Hay alguna manera de obtener el nombre de la función de llamada dentro del destinatario?

estoy experimentando con Javascript/jQuery un poco esta mañana y estaba tratando de capturar el nombre del remitente de la función que se está ejecutando.

Por lo tanto, en el siguiente ejemplo, el registro mostrará runMe como la persona que llama y showMe como el destinatario.

jQuery(document).ready(function($) { 

    function showMe() { 
    // should log the runMe as the caller and showMe as callee 
    console.log('Callee: ',arguments.callee) 
    console.log('Caller: ',arguments.caller); 
    } 

    function runMe() { 
    // getting executed as a button is pressed. 
    showMe(); 
    } 

    $('a').bind('click', function(e) { 
    e.preventDefault(); 
    runMe(); 
    }); 

}); 

Lo anterior obviamente no funciona, de ahí mi pregunta para todos ustedes.

¿Hay una buena manera de obtener la persona que llama en el ejemplo anterior?

favor Nota: Estoy consciente de que podría conseguir el destinatario de la llamada de runMe y pasarlo a showMe como un argumento, pero esta pregunta está apuntando hacia una solución que no requiere de la persona que llama para ser introducida en la función 'manualmente'.

¿Hay razones para no hacer algo como esto?

+0

¿Por qué escribe la escritura corriente 'jQuery (document) .ready' pero la abreviatura' $ ('a'). Bind'? –

+0

por razones de no hacerlo, ¿por qué necesita hacerlo? – Claudiu

+1

@Claudiu: Serías un buen psiquiatra. –

Respuesta

16

que solía ser capaz de hacer arguments.caller.name, pero esto es deprecated in Javascript 1.3.

arguments.callee.caller.name (o solo showMe.caller.name) es another way to go. Esto es non-standard, but currently supported en todos los navegadores principales.

+1

¿Por qué dice que está en desuso? Lo que está en desuso es la propiedad 'calller' del objeto' arguments', aunque aquí se hace referencia a la propiedad 'caller' de una función, que es la misma referencia no estándar que su segunda opción. – davin

+0

@davin: tienes razón. Buen lugar. Editaré –

+0

¿por qué es necesaria la propiedad de nombre en una llamada de consola? –

1

Creo que es ....

arguments.callee.caller

3

Trate callee.caller como esto

function showMe() { 
     // should log the runMe as the caller and showMe as callee 
     console.log('Callee: ',arguments.callee.name) 
     console.log('Caller: ',arguments.callee.caller.name); 
     } 
Cuestiones relacionadas