在项目应用中,经常会需要根据业务数据需要动态去拼凑字符串,然后将字符串作为js代码进行执行。
js提供eval()来支持。这里分享一个调用函数并传入需要参数的一个方法demo
//动态调用自定义js方法.args是以逗号分隔的参数字符串 var CallFunName = function (fn, args) { var aArr = [];//传入的参数集合 if (args != null && args != "") { aArr = args.split(","); } try { fn = eval(fn); } catch (e) { console.log(e); alert(funName + '方法不存在!'); } if (typeof fn === 'function') { try { fn.apply(this, aArr );//注意此处用apply,而非call } catch (ex) { console.log(ex); alert(funName + '变量个数不对'); } } }
1、考虑到调用函数方法CallFunName第一个参数(函数名)是在页面动态添加的js内容(即字符串),故没有直接支持传入参数数组的方式,而是一串以逗号分隔的参数字符串
2、在方法体内把参数字符串转换为数组。然后通过apply调用
此处不选用call调用的原因为:call调用形式会把参数数组作为一个变量传递给待待用的方法,而往往我们待调用的方法参数不是以数组形式声明的:
function Fun(arg1,arg2,...) { ... }