2010-10-04 17 views
17

¿Es posible de alguna manera establecer un nombre para funciones anónimas?Nombrar una función anónima

No hay necesidad de agregar nombres de funciones al espacio de nombres para funciones anónimas pero me gustaría evitar ver una gran cantidad de (?) En mi depurador de JavaScript para poder mantener la información de la pila de llamadas informativa.

También puedo pasar con seguridad las funciones declaradas normales como argumentos en lugar de funciones anónimas o entraré en algunos errores extraños. Parece funcionar.

$("object").bind("click", function() { alert("x"); }); 

$("object").bind("click", function debuggingName() { alert("x"); }); 

[Editar]

que significaba algo a lo largo de la talla de

$("object").bind("click", function() { Function.Name = "debuggingName"; alert("x"); }); 
+4

@Raynos - una función anónima llamada es una contradicción en sí !! – InSane

+0

¿Obtiene algún error cuando usa su segunda construcción anterior? –

+0

Solo quiero establecer algo dentro de una función anónima que el depurador pueda recoger y mostrar como un nombre de función de depuración útil. Quiero usarlos exactamente como usaría las funciones anónimas – Raynos

Respuesta

17

Su segundo ejemplo es el uso de una expresión de función llamado , que funciona bien en la mayoría de los navegadores, pero tiene algunos problemas en IE que usted debe tener en cuenta antes de usarlo. Recomiendo leer kangax's excellent article on this subject. .

+0

Gracias, me preocupaba que pasar una expresión de función nombrada pudiera causar errores. – Raynos

+0

Oh, es un artículo encantador. No me di cuenta de que había una gran diferencia entre las expresiones de funciones nombradas y la declaración de funciones. – Raynos

+0

Sí, estaba escribiendo un comentario señalando :) –

-3

una función anónima es una función sin nombre, se ejecuta desde donde se define. Alternativamente, puede definir la función de depuración antes de usarla.

function debuggingName() { 
    alert("x"); 
} 

$("object").bind("click", debuggingName); 
0

Si dinámica nombre de la función es la cuestión. Puede probar esto:

function renameFunction(name, fn) { 
    return (new Function("return function (call) { return function " + name + 
     "() { return call(this, arguments) }; };")())(Function.apply.bind(fn)); 
} 

renameFunction('dynamicName',function() { debugger })(); 

fuente: Nate Ferrero en How to dynamically set a function/object name in Javascript as it is displayed in Chrome

+1

Acabo de ver una solución mejor para eso en http://stackoverflow.com/questions/5871040/how-to-dynamically-set-a-function-object-name-in-javascript-as-it-is- display-i –

+0

Nunca hagas esto. Es tonto y detallado. –

Cuestiones relacionadas