我有一个功能:
var greet = function (name) {
console.log("Hi " + name);
}
如果我有一个字符串“greet('eric')”,是否可以将它转换为函数调用,将“eric”作为参数传递?
答案 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
;)