用字符串调用javascript函数?

时间:2011-04-20 06:09:18

标签: javascript

我有一个功能:

var greet = function (name) {
    console.log("Hi " + name);
}

如果我有一个字符串“greet('eric')”,是否可以将它转换为函数调用,将“eric”作为参数传递?

5 个答案:

答案 0 :(得分:2)

eval()是你的朋友! http://www.w3schools.com/jsref/jsref_eval.asp

答案 1 :(得分:2)

你,我,他和她们,他们(讨厌')讨厌eval。总有另一种方式。

callMethod = function(def) {
    //all the variables are function references
    var approvedMethods = {greet: greet, love: love, marry: marry, murder: murder, suicide: suicide},
        split = def.split(/\(/); //split[0] contains function name, split[1] contains (unsplit) parameters

    //replace last ) and all possible string detonators left-over
    split[1] = split[1].replace(/\)$/, '').replace(/[\'\"]/g, '').split(','); //contains list of params

    if (!approvedMethods[split[0]])
        return 'No such function.';

    approvedMethods[split[0]].apply(window, split[1]);
}
//Called like this:
callMethod("greet('eric')");

用任何内容替换窗口引用。

答案 2 :(得分:1)

我不确定我是否正确理解了您的问题,但您是否正在寻找eval()功能?

eval("greet('eric')");

答案 3 :(得分:1)

就像打字一样简单

eval("greet('eric')");

答案 4 :(得分:1)

没有eval

var greet = function (name) {
      console.log("Hi " + name);
    },
    greetstr = 'greet("Eric")';

var greeter = greetstr.split('("');
window[greeter[0]]( greeter[1].replace(/\)|"/g,'') );

底线1:use eval with care
第2行:避免像这样的结构。

为了确保你有所有可能性@你的处置:setTimeout(greetstr,0);
嗯,某处有一个eval;)