我一直在学习传播参数,我发现使用:cur.func.call(null, ...cur.arg, acc), args)
时相当令人惊讶,如果你有一个空数组,则没有参数传递给add()
。
是否可以在不使用此代码行...
中所见的cur.func.call(null, ...cur.arg, acc), args)
的情况下重现此内容
class Lazy {
constructor() {
this.builtUpFuncs = [];
}
add(...newArgs) {
console.info(newArgs)
this.builtUpFuncs.push({
func: newArgs[0],
arg: typeof newArgs[1] === "undefined" ? [] : [newArgs[1]],
});
return this;
}
evaluate(target) {
return target.map((args) =>
this.builtUpFuncs.reduce((acc, cur) =>
cur.func.call(null, ...cur.arg, acc), args)
);
}
}
const lazyClass = new Lazy();
const returnValue =
lazyClass
.add(function timesTwo(a) { return a * 2; })
.add(function plus(a, b) { return a + b; }, 1)
.evaluate([1, 2, 3]);
console.info(returnValue);

答案 0 :(得分:2)
如果您想避免传播语法,传统方法是使用apply
代替call
:
cur.func.apply(null, cur.arg.concat(acc))
请注意,args
部分是reduce
的第二个参数,而不是此函数调用。
在任何一种语法中,如果cur.arg
是一个空数组,那么传递的唯一参数是acc
是正常的。