Nombre de la función dinámica de JavaScript
Frecuentes
Visto 1,592 veces
0
Necesito asignar dinámicamente el nombre de una función a un elemento de una matriz asociativa. Este es mi intento que no funciona. El problema con el que pido ayuda es aquí donde intento llamar a la función: cr['cmd1'](x)
;
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
var cr =[];
var x = 5;
cr['cmd1'] ='foo';
var msg = cr['cmd1'](x);
alert(msg);
function foo(y){
return y;
}
</script>
</head>
<body>
</body>
</html>
Edit: Me pasan una cuerda aquí cr['cmd1'] ='foo';
que no puedo controlar. Es por eso que tengo que trabajar con una cadena como punto de partida desde una aplicación externa.
4 Respuestas
5
Acceda a las funciones usando esta sintaxis window[function_name]('para1');
Su uso será algo como esto
var msg = window[cr['cmd1']](x);
contestado el 02 de mayo de 12 a las 19:05
5
Si desea almacenarlo como una función, pase la función directamente. De lo contrario, si solo desea almacenarlo como una cadena, puede usar las comillas.
Cambiar:
cr['cmd1'] ='foo';
A:
cr['cmd1'] = foo;
contestado el 02 de mayo de 12 a las 19:05
Kirk, gracias, pero me están pasando una cadena "foo" como punto de partida. - John R
1
Usaría window[] y me aseguraría de que sea una función antes de intentar ejecutarla, ya que no tienes control sobre lo que se pasa.
var f = window[cr['cmd1']];
if(typeof f==='function') {
f(x);
}
contestado el 02 de mayo de 12 a las 19:05
0
Lo que estás haciendo allí es asignar una función a una matriz. Un patrón más común que probablemente esté tratando de hacer es llamar a una función en un objeto con la notación de matriz.
<script type="text/javascript">
var cr = {};
cr.cmd1 = function foo(y){
return y;
};
var x = 5;
var msg = cr['cmd1'](x);
alert(msg);
</script>
Este código da como resultado un cuadro de alerta que contiene el número 5.
contestado el 02 de mayo de 12 a las 19:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas javascript or haz tu propia pregunta.
¿Qué no funciona? ¿Cuál es el error? ¿Cuáles espera que sean los resultados de la alerta? - KP.