Выполнить несколько функций в функции - PullRequest
0 голосов
/ 20 декабря 2018
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] не является функцией».

Возможно, если у вас есть другое элегантное решение для этого кода, я был бы признателен, если бы вы поделились снас.

Спасибо всем заранее!

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Для меня способ, которым вы хотите достичь, может быть недоступен для чтения другими разработчиками.Вы можете создать функцию, которая будет группировать все ваши функции, такие как:

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)
0 голосов
/ 20 декабря 2018

Вы можете использовать частичное приложение для этого.Частичное применение означает, что вы берете данную функцию и фиксируете в ней один или несколько параметров.Пример

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...