简体   繁体   中英

JavaScript dynamic function name

I need to dynamically assign the name of a function to an element of an associative array. This is my attempt which does not work. The problem I am asking for help with is here where I try to call the function: 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: I being passed a string here cr['cmd1'] ='foo'; that I cannot control. That is why I have to work with a string as a starting point from an external application.

If you want to store it as a function, pass the function directly. Otherwise, if you just want to store it as a string, then you can use the quotes.

Change:

cr['cmd1'] ='foo';

To:

cr['cmd1'] = foo;

Access the functions using this syntax window[function_name]('para1');

Your usage will be something like this

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

I would use window[] and make sure its a function before trying to execute it since you don't have control over what is passed.

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

What you are doing there is assigning a function to an array. A more common pattern that you are probably trying to do is to call a function on an object with the array notation.

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

This code results in an alert box that contains the number 5.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM