2012-03-09 22 views
5

Tengo cadena que contiene la definición de la función anonymus, pero cómo puedo llamar esto. Digamos que es función de este modo:Cómo llamar a la función anonymus desde la cadena

var fn_str = "function(){ alert('called'); }"; 

eval intentado, pero tiene un error que la función debe tener un nombre.

eval(fn_str).apply(this); // SyntaxError: function statement requires a name 
+0

Usted llamar '' eval' con a' mientras que la cadena de función está en 'fn_str'. eso no funcionará de esta manera ... – gdoron

+0

Disculpa, utilicé una consola Firebug para abreviar, pero olvidé cambiar esto, ojo bueno aunque – Kristian

Respuesta

5

Puede utilizar Inmediatamente Se invoca expresión de función:

var fn_str = "function(){ alert('called'); }"; 
eval('(' + fn_str +')();'); 

Immediately Invoked Function Expression

Otra forma es utilizar a a Function objeto (Si usted tiene la cadena de cuerpo de la función):

var func = new Function("alert('called')"); 
func.apply(this); 
+1

Ya lo descubrí, ¡pero gracias! Aceptar/+ 1 para respuesta rápida :) – Kristian

1

encontrado la solución: Poner la función paréntesis

var a = "(function(){ alert('called'); })"; 
eval(a).apply(this); 
+1

No necesitas escribir use 'apply' puedes usar * Expresiones de función invocadas inmediatamente ** como respondí. – gdoron

+0

Conozco esa sintaxis, pero no puedo pasar un objeto como un parámetro de esa manera (sin analizar un objeto en la cadena). ¿O puedo? – Kristian

+0

¿Qué quisiste decir en ese comentario? No lo entendí. ¿Que necesitas? – gdoron

Cuestiones relacionadas