2010-10-14 18 views
5

¿Cómo hago esto?Javascript eval() para la función con argumento

function myUIEvent() { 
    var iCheckFcn = "isInFavorites"; 
    var itemSrc = ui.item.find("img").attr("src"); 

    if (eval(iCheckFcn(itemSrc))) { alert("it's a favorite"); } 

function isInFavorites(url) { return true; } // returns boolean 
+2

Es posible que desee comenzar escribiendo un código sintácticamente válido. Te estás perdiendo un corsé de cierre en algún lugar allí. –

Respuesta

6

No utilice eval(), antes que nada.

function myUIEvent() { 
    var iCheckFcn = isInFavorites; 
    var itemSrc = ui.item.find("img").attr("src"); 

    if (iCheckFcn(itemSrc)) { alert("it's a favorite"); } 
} 

Las funciones son objetos, y puede asignar una referencia a una función para cualquier variable. A continuación, puede usar esa referencia para invocar la función.

+0

¡salud! gracias por la explicación también. – FFish

+0

Creo que se perdió el objetivo de la pregunta. Su ejemplo todavía codifica de forma rígida el var iCheckFcn con el valor codificado isInFaorites. La pregunta específicamente preguntó cómo configurar el iCheckFcn dinámicamente con el nombre de la función NO codificada, pero pasada como una variable (en su ejemplo llamado var iCheckFcn se asigna en este caso una cadena codificada, pero podría ser una cadena dinámicamente pasada. –

+0

@PaulGorbas te das cuenta de que esto es más de 6 años de edad, ¿verdad? De todos modos, las referencias a las funciones se pueden pasar como parámetros, y todavía no hay necesidad de 'eval()'. – Pointy

2

La mejor manera es lo puntiagudo descrito, o, alternativamente, usted podría simplemente hacer esto:

if (window[iCheckFcn](itemSrc)) { 
    alert("it's a favorite"); 
}; 
0

Si se encuentra en AngularJS medio ambiente, es sólo que simple:

$rootScope.calculate = function(param1,param2) 
{ 
    console.log(param1+param2); 
} 

var func = '$rootScope.calculate'; 
eval(func)(1,2); //---> 3 
Cuestiones relacionadas