function executeActions(param)
{
if((param != undefined) && (param.length > 0))
{
for(i=0; i < param.length; i++)
{
//eval like function
param[i]();
}
}
}
function clearFields()
{
...
}
function showAbs(param)
{
if(param == 'insert')
{
...
}
else if(param == 'update')
{
...
}
else
{
...
}
}
$("#clearButton").click(function(event)
{
//var functions = ["clearFields()","showAbs('insert')"];
var a = showAbs('insert');
var functions = [clearFields, a];
executeActions(functions);
});
大家好! 如何像上面显示的那样在一组指令中连续执行带有参数的某些功能?
如果它们没有任何参数,则函数将像链中一样执行,但是,如果其中一个或多个使用 一些参数,它停止并显示错误:“ param [i]不是函数”。
如果您对此代码有另一个优雅的解决方案,请与我们分享。
谢谢大家!
答案 0 :(得分:1)
您可以为此使用部分应用程序。部分应用意味着您采用了给定的功能并为其修复了一个或多个参数。例子
function sum(a, b){
return a + b;
}
function product(a, b){
return a * b;
}
function doSomething(){
// do something
}
function runFunctions(funcs){
for(var i = 0;i<funcs.length;i++){
funcs[i]();
}
}
var mySum = function(){
return sum(5, 6);
}
var myProduct = function(){
return product(2, 3);
}
runFunctions(mySum, myProduct, doSomething);
上面使用的是ES 5语法。您可以使用ES 6语法使此内容更加简洁:
const sum = (a, b) => a + b;
const product = (a, b) => a * b;
const doSomething = () => // do something
const runFunctions = funcs => {
for(func of funcs)
func();
}
var mySum = () => sum(5, 6);
var myProduct = () => product(2, 3);
runFunctions(mySum, myProduct, doSomething);
或者您可以使用bind
函数来修复变量:
const sum = (a, b) => a + b;
const product = (a, b) => a * b;
const doSomething = () => // do something
const runFunctions = funcs => {
for(func of funcs)
func();
}
runFunctions(sum.bind(null, 5,6), myProduct.bind(null, 2,3), doSomething);
答案 1 :(得分:0)
对我来说,其他开发人员可能无法理解您想要实现的方法。 您可以创建一个将所有函数执行分组的函数,例如:
function groupedFunctions{
return {
A: funcA(param),
B: funcB(param),
C: funcC(param)
}
}
function executeActions(funcObj, params) {
funcObj.A(params.a);
funcObj.B(params.b);
}
let params = {a: 1, b:2}
executeActions(groupedFunction(), params)