JavaScript:如何用不同的参数多次运行一个函数?

时间:2018-10-03 12:22:28

标签: javascript function extjs arguments factory-pattern

我正在使用ExtJS框架,并使用不同的参数多次运行一个方法。

我正在寻找一种使它变得更加组成,简单和可维护的方法,我想只有香草Javascript解决方案可以解决这个问题?

我尝试将每个参数收集到数组中,并使用Array.map()forEach()方法,但是我无法处理。

感谢前进。

//ExtJS class:
Ext.define('MyApp.FooClass', {
    extend: 'Ext.panel.Panel',

    items: [
        MyApp.createFooCard('Func1Param1', 'Func1Param2', 'Func1Param3'),
        MyApp.createFooCard('Func2Param1', 'Func2Param2', 'Func2Param3'),
        MyApp.createFooCard('Func3Param1', 'Func3Param2', 'Func3Param3'),
    ]
});

您会注意到,我总共对每个方法使用相同的方法,但使用不同的参数。

//And here is related factory-function:
createFooCard: (bindValue, userCls, glyph, label) => {
        return {
            itemId: bindValue,
            userCls: userCls,
            glyph: MyApp.getGlyph(glyph),
            items: {
                xtype: 'infocardfld',
                fieldLabel: label,
                bind: '{' + bindValue + ' || "0"}'
            }
        }
    }

2 个答案:

答案 0 :(得分:3)

它与Array.prototype.map一起使用以收集嵌套数组,并与Spread syntax中继这些数组以在工厂功能上运行。应该是:

Ext.define('MyApp.FooClass', {
    extend: 'Ext.panel.Panel',

    items: [
              ['Func1Param1', 'Func1Param2', 'Func1Param3'],
              ['Func2Param1', 'Func2Param2', 'Func2Param3'],
              ['Func3Param1', 'Func3Param2', 'Func3Param3']
           ].map(args => MyApp.createFooCard(...args));
    });

答案 1 :(得分:0)

如果此Items数组在全局范围内,则可以在createFooCard函数内部轻松地向其中添加元素。例如:

//您的元素集合数组

var items = []

//您的功能

function createFooCard(bindValue, userCls, glyph, label) {
    var temp = {
        itemId: bindValue,
        userCls: userCls,
        glyph: MyApp.getGlyph(glyph),
        items: {
            xtype: 'infocardfld',
            fieldLabel: label,
            bind: '{' + bindValue + ' || "0"}'
        }
    };

    items.push(temp);
}

您也可以轻松地将数组作为参数传递。如果您想使其更通用。