我需要使用new Function()构造函数创建一个具有可变数量参数的函数.像这样的东西:
args = ['a', 'b'];
body = 'return(a + b);';
myFunc = new Function(args, body);
Run Code Online (Sandbox Code Playgroud)
没有可能eval()吗?
非常感谢你们!实际上,a + b不是我主要关注的问题.我正在研究一个处理和扩展模板的代码,我需要将未知(和变量)数量的参数传递给函数,以便将它们作为局部变量引入.
例如,如果模板包含:
<span> =a </span>
Run Code Online (Sandbox Code Playgroud)
我需要输出参数的值a.也就是说,如果用户声明扩展功能为
var expand = tplCompile('template', a, b, c)
Run Code Online (Sandbox Code Playgroud)
然后打电话
expand(4, 2, 1)
Run Code Online (Sandbox Code Playgroud)
我需要替换=a使用4.是的,我很清楚功能类似于eval()并且运行速度非常慢,但我没有任何其他选择.
我正在使用Javascript文件上传库,其中一个功能是它使用HTML5内联数据属性将信息传递给插件.
这适用于任何数据相关,字符串,数字等,但插件有一些你可以分配函数的回调方法.我的问题是,当试图通过这些内联数据属性传递javascript函数时,如下所示:
<input type="file" name="test" data-on-finish="alert();">
Run Code Online (Sandbox Code Playgroud)
该插件可以很好地获取对onFinish()回调方法的引用,但是当它尝试执行我放入的任何javascript时,我得到错误:
Uncaught TypeError: Object alert(); has no method 'call'
Run Code Online (Sandbox Code Playgroud)
我假设它正在读取alert();字符串.知道如何通过可执行的JavaScript传递到插件吗?
我相信我使用的插件是jQuery文件上传插件的扩展:https: //github.com/blueimp/jQuery-File-Upload/wiki/Options
更新: 我也尝试使用全局定义的函数,如下所示:
<script type="text/javascript">
function myTesting(){
alert('yay');
}
</script>
<input type="file" name="test" data-on-finish="myTesting">
Run Code Online (Sandbox Code Playgroud)
我试着改变data-on-finish属性myTesting,myTesting()仍然没有运气...