Nombre de la función dinámica de JavaScript

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.

preguntado el 02 de mayo de 12 a las 19:05

¿Qué no funciona? ¿Cuál es el error? ¿Cuáles espera que sean los resultados de la alerta? -

4 Respuestas

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

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

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

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 or haz tu propia pregunta.