0

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

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

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

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

但这只有在我的函数名与参数分开时才有效。就我而言,它们已经结合在一起了。我想我可以使用 eval() 但共识似乎是应该避免它。还有其他方法吗?

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

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

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

4

2 回答 2

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;)">
<!--                                          ^^^^^^                              ^^^^^^ -->

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

于 2013-07-31T20:38:42.943 回答
1

使用 eval,就像:

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

但是eval 非常危险,不推荐。

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

还有一个好的做法是传递数据(即使用 JSON)而不是代码。尝试重新思考你的逻辑或提供更多信息。

于 2013-07-31T19:54:59.317 回答