Вопрос по javascript – Имя динамической функции JavaScript

0

Мне нужно динамически назначить имя функции для элемента ассоциативного массива. Это моя попытка, которая не работает. Проблема, с которой я прошу помощи, заключается в том, что здесь я пытаюсь вызвать функцию: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: Я передавал строку здесьcr['cmd1'] ='foo'; что я не могу контролировать. Вот почему я должен работать со строкой в качестве отправной точки из внешнего приложения.

оповещение должно быть 5. John R
Что не работает? В чем ошибка? Что вы ожидаете от результатов оповещения? KP.

Ваш Ответ

4   ответа
5

передайте функцию напрямую. В противном случае, если вы просто хотите сохранить его как строку, вы можете использовать кавычки.

Изменить:

cr['cmd1'] ='foo';

Для того, чтобы:

cr['cmd1'] = foo;
Error: User Rate Limit Exceededjsfiddle.net/VfsLB/2
Error: User Rate Limit Exceeded John R
1

что это функция, прежде чем пытаться ее выполнить, поскольку вы не можете контролировать то, что передается.

var f = window[cr['cmd1']];
if(typeof f==='function') {
  f(x);
}
0

что вы делаете, - это назначение функции массиву. Более распространенный шаблон, который вы, вероятно, пытаетесь сделать, - это вызов функции для объекта с нотацией массива.

    <script type="text/javascript">
        var cr = {};
        cr.cmd1 = function foo(y){
            return y;
        };
        var x = 5;
        var msg = cr['cmd1'](x);  
        alert(msg);
    </script>

Этот код приводит к появлению окна предупреждения с номером 5.

5

window[function_name]('para1');

Ваше использование будет примерно таким

var msg = window[cr['cmd1']](x);

Похожие вопросы