在javascript中,我有一个这样的字符串:
"doSomething('param1','param2')"
我想执行它。我知道我通常可以使用
window['doSomething']('param1', 'param2');
但是只有当我的函数名与参数分开时才有效。在我的情况下,他们已经合并。我想我可以使用eval(),但共识似乎是应该避免。还有另一种方式吗?
修改 要回答更多信息的请求:我正在使用这样的字符串:
<a id="YesButton" onclick="closeModalView_Yes("doSomething('param1','param2')")">
其中closeModalView_Yes将关闭模态是/否窗口,然后执行给定的函数,尽管有时我可能会传递doSomethingElse(param1),它只接受一个参数。
答案 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("doSomething('param1','param2')")">
<!-- ^^^^^^ ^^^^^^ -->
您可以通过注册事件via javascript而不是内联属性来避免这种情况。