如何执行包含函数名和参数的字符串?

时间:2013-07-31 19:45:40

标签: javascript eval

在javascript中,我有一个这样的字符串:

"doSomething('param1','param2')"

我想执行它。我知道我通常可以使用

window['doSomething']('param1', 'param2');

但是只有当我的函数名与参数分开时才有效。在我的情况下,他们已经合并。我想我可以使用eval(),但共识似乎是应该避免。还有另一种方式吗?

修改 要回答更多信息的请求:我正在使用这样的字符串:

<a id="YesButton" onclick="closeModalView_Yes("doSomething('param1','param2')")">

其中closeModalView_Yes将关闭模态是/否窗口,然后执行给定的函数,尽管有时我可能会传递doSomethingElse(param1),它只接受一个参数。

2 个答案:

答案 0 :(得分:1)

使用eval,就像:

eval( "console.log( 'hey', 'here I am' )" );

然而eval is pretty dangerous并不推荐。

如果可以(我们仍然没有关于您的案例的详细信息),请在模板中的<script>代码之间渲染JavaScript,使其成为&#34;常规代码&#34;更容易调试。

另一个好的做法是传递数据(即使用JSON)而不是代码。尝试重新考虑您的逻辑或提供其他信息。

答案 1 :(得分:1)

<a id="YesButton" onclick="closeModalView_Yes("doSomething('param1','param2')")">

你真的不应该把它作为一个字符串传递,而是作为一个函数传递:

closeModalView_Yes(function(){ doSomething('param1','param2'); });

一起
function closeModalView_Yes(callback) {
    // do whatever needs to be done to close the window
    // and after that
    callback();
}

顺便说一下,根据您当前的方法,HTML甚至不是有效的,它需要

<a id="YesButton" onclick="closeModalView_Yes(&quot;doSomething('param1','param2')&quot;)">
<!--                                          ^^^^^^                              ^^^^^^ -->

您可以通过注册事件via javascript而不是内联属性来避免这种情况。