在将参数传递给函数调用时,不使用扩展参数(...)重现

时间:2018-01-16 17:30:46

标签: javascript

我一直在学习传播参数,我发现使用: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);




1 个答案:

答案 0 :(得分:2)

如果您想避免传播语法,传统方法是使用apply代替call

cur.func.apply(null, cur.arg.concat(acc))

请注意,args部分是reduce的第二个参数,而不是此函数调用。

在任何一种语法中,如果cur.arg是一个空数组,那么传递的唯一参数是acc是正常的。