我想创建一个对函数进行排序并调用它的函数。问题是每个函数可能有不同数量的参数,并且必须在排序之前传递这些参数。例如:
numCheckedArray.remove(Integer.valueOf(which));
问题是如果我像这样传递数组,我已经传递了函数的值,但是我不想在排序之前执行这些函数,因为它们很重计算,所以只需要执行一次,这就是我排序的原因。
没有办法像这样通过:
function sortFunciton(arrayOfFunctions) {
}
mySortedFunction = sortFunction([function1('a', 'b'), function2('a'), function3('a','b','c')])
然后再做
mySortedFunction = sortFunction([function1.args('a', 'b', 'c')], function2.args('a'), function3.args('a', 'b', 'c')])
答案 0 :(得分:1)
您可以使用Function.prototype.bind
:
function selectFunc(funcArray) {
//some selection criteria
return funcArray[0];
}
mySelectedFunc = selectFunc([function1.bind(null, 'a', 'b'), function2.bind(null, 'a'), function3.bind(null, 'a','b','c')]);
mySelectedFunc() //equivalent of running function1('a', 'b')
答案 1 :(得分:0)
您可以使用.bind
然后只需调用不带参数的函数(将使用已绑定的参数调用它)
function add(a, b) { return a + b; }
function mult(a, b) { return a * b; }
var functions = [add.bind(this, 1, 1), mult.bind(this, 5, 5)];
functions.forEach(f => console.log(f()));
答案 2 :(得分:0)
function sortFunciton(arrayOfFunctions) {
}
var mySortedFunction = sortFunction([
{ func: function1, arguments: ['a', 'b']},
{ func: function2, arguments: ['a']},
{ func: function3, arguments: ['a', 'b', 'c']}
]);
for (var i = 0; i < mySortedFunction.length; i++)
{
mySortedFunction[i].func.apply(this, mySortedFunction[i].arguments);
};