可能重复:
How to execute a JavaScript function when I have its name as a string如何从字符串中触发函数?
我有这个功能
function myfunc() {
alert('it worked!');
}
和这个变量是一个字符串
var callback = 'myfunc';
如何从该字符串中触发该功能?
可能重复:
How to execute a JavaScript function when I have its name as a string如何从字符串中触发函数?
我有这个功能
function myfunc() {
alert('it worked!');
}
和这个变量是一个字符串
var callback = 'myfunc';
如何从该字符串中触发该功能?
假设该函数是全局声明的,它将包含在window
对象中,因此您可以使用window[callback]()
来调用它。
全局声明的函数存储在window
对象中,因此您可以使用window.myfunc
引用myfunc
。与JavaScript对象的其他属性一样,您可以使用大括号语法而不是点符号,因为您的callback
变量中包含字符串"myfunc"
,您可以简单地使用该符号代替window["myfunc"]
。一旦你有了参考资料,你可以把它称为window[callback]()
。
如果你在浏览器中做这个,试试这个:window[callback]()
也可以使用eval - 像eval(callback + '()')
- 但这是非常低效和不推荐使用。
而且,你可能要考虑到回调可变分配功能本身,而不是它的名字:
function myfunc() {...}
var callback = myfunc
...
callback() # trigger callback
这在很多情况下工作,但当然,有时候你只需要通过它作为一个字符串。
您应该传递函数而不是带名称的字符串。那么你不能通过它打电话callback()
如果这是在浏览器上运行的代码,那么myfun
是window
对象的一种方法。您可以调用该方法,像这样:
window[callback]();
试试这个:
window[callback]();
,不要试图使用eval()
,永远,永远!
+1指出*从不*使用评估! – 2012-02-09 10:42:13
不要质疑你的回答,但许多人重复“eval是邪恶的”,只有少数人可以真正解释为什么。 – georg 2012-02-09 10:57:04
@ thg435:[here](http://bonsaiden.github.com/JavaScript-Garden/#core.eval)是一个简短的总结:“任何使用它的代码都会在其**中被质疑工作**,**表现**和**安全**“ – 2012-02-09 11:01:40
如果它是一个全球性的功能,可以调用是
window[callback]();
如果没有,你可能会对其进行评估。
eval(callback + '();');
http:// stackoverflow。com/questions/359788/how-to-execute-a-javascript-function-when-i-have-name-as-a-string – 2012-02-09 10:41:00
现在我知道在SO – 2012-02-09 10:50:55