2012-02-09 27 views
0

可能重复:
How to execute a JavaScript function when I have its name as a string如何从字符串中触发函数?

我有这个功能

function myfunc() { 
    alert('it worked!'); 
} 

和这个变量是一个字符串

var callback = 'myfunc'; 

如何从该字符串中触发该功能?

+2

http:// stackoverflow。com/questions/359788/how-to-execute-a-javascript-function-when-i-have-name-as-a-string – 2012-02-09 10:41:00

+1

现在我知道在SO – 2012-02-09 10:50:55

回答

2

假设该函数是全局声明的,它将包含在window对象中,因此您可以使用window[callback]()来调用它。

全局声明的函数存储在window对象中,因此您可以使用window.myfunc引用myfunc。与JavaScript对象的其他属性一样,您可以使用大括号语法而不是点符号,因为您的callback变量中包含字符串"myfunc",您可以简单地使用该符号代替window["myfunc"]。一旦你有了参考资料,你可以把它称为window[callback]()

+1

上禁止发布lmgtfy dot com的答案但是它不应该是'window'而不是'Window'吗? – Alexis 2012-02-09 11:22:20

+0

@Alexis - 很对,谢谢。答案已更新 – detaylor 2012-02-09 12:02:12

2

如果你在浏览器中做这个,试试这个:window[callback]()

也可以使用eval - 像eval(callback + '()') - 但这是非常低效和不推荐使用。

而且,你可能要考虑到回调可变分配功能本身,而不是它的名字:

function myfunc() {...} 
var callback = myfunc 
... 
callback() # trigger callback 

这在很多情况下工作,但当然,有时候你只需要通过它作为一个字符串。

0

您应该传递函数而不是带名称的字符串。那么你不能通过它打电话callback()

1

如果这是在浏览器上运行的代码,那么myfunwindow对象的一种方法。您可以调用该方法,像这样:

window[callback](); 
1

试试这个:

window[callback](); 

,不要试图使用eval(),永远,永远!

+0

+1指出*从不*使用评估! – 2012-02-09 10:42:13

+1

不要质疑你的回答,但许多人重复“eval是邪恶的”,只有少数人可以真正解释为什么。 – georg 2012-02-09 10:57:04

+0

@ thg435:[here](http://bonsaiden.github.com/JavaScript-Garden/#core.eval)是一个简短的总结:“任何使用它的代码都会在其**中被质疑工作**,**表现**和**安全**“ – 2012-02-09 11:01:40

1

如果它是一个全球性的功能,可以调用是

window[callback](); 

如果没有,你可能会对其进行评估。

eval(callback + '();');