JQuery调用函数和字符串中的多个参数

时间:2017-03-29 17:23:57

标签: jquery

如果我有一个功能:

function myfunc(param1, param2, param3) {
  // ...
}

我有一个字符串:

var myCall = "myfunc(1, 'abc', 'true')"

有没有办法使用字符串进行函数调用并包含参数?我事先并不知道参数的数量。 我试过了

var func = myCall.substr(0, myCall.indexOf('('));
var args = myCall.substring(myCall.indexOf('(')+1, myCall.length-1);    
window[func](args.split(','));

但是只调用带有数组的函数到第一个参数。如何拆分参数并使用未知数量的参数传递它们?

2 个答案:

答案 0 :(得分:3)

您可以使用Function构造函数执行此操作:

function myfunc(param1, param2, param3) {
    console.log(param1, param2, param3);
}

var myCall = "myfunc(1, 'abc', 'true')";
// here the 'myfunc' string indicates the name of a parameter that will
// be passed into the function that new Function is creating.
// i.e., we are going to pass in the myfunc function
// when we actually call myCaller
var myCaller = new Function('myfunc', myCall);

myCaller(myfunc);

答案 1 :(得分:0)

您可以使用.replace() RegExp再次使用/\(.*/.replace() RegExp替换除功能名称/^\w+(?=\))|[()]/以外的所有字符以删除字符串中的函数名称和括号,.match()RegExp /[\w\d]+/g匹配数字或字符,.map()表示数组中的数字或字符,Function.prototype.apply()将数组传递给函数调用

function myfunc(param1, param2, param3) {
  console.log(param1, param2, param3)
}

var myCall = "myfunc(1, 'abc', 'true')";

var fn = myCall.replace(/\(.*/, "");

var params = myCall.replace(/^\w+(?=\))|[()]/, "")
             .match(/[\w\d]+/g).map(function(param) {
               return /\d/.test(param) ? +param : param
             });

window[fn].apply(null, params);