_.overArgs(func, [transforms=[_.identity]])

108

_.overArgs(func, [transforms=[_.identity]])

_.overArgs创建一个函数,这个函数的参数会被对应的transform方法处理

参数

func (Function): 需要被包裹的函数
[transforms=[_.identity]] (...(Function|Function[])): 参数转换函数组成的数组

返回值

(Function): 返回新的包裹好的函数

例子

function doubled(n) {
  return n * 2;
}
 
function square(n) {
  return n * n;
}
 
var func = _.overArgs(function(x, y) {
  return [x, y];
}, [square, doubled]);
 
func(9, 3);
// => [81, 6]
 
func(10, 5);
// => [100, 10]

源代码

/**
 * Creates a function that invokes `func` with its arguments transformed.
 *
 * @since 4.0.0
 * @category Function
 * @param {Function} func The function to wrap.
 * @param {Function[]} [transforms=[identity]]
 *  The argument transforms.
 * @returns {Function} Returns the new function.
 * @example
 *
 * function doubled(n) {
 *   return n * 2
 * }
 *
 * function square(n) {
 *   return n * n
 * }
 *
 * const func = overArgs((x, y) => [x, y], [square, doubled])
 *
 * func(9, 3)
 * // => [81, 6]
 *
 * func(10, 5)
 * // => [100, 10]
 */
//创建一个函数,这个函数的参数会被对应的transform方法处理
function overArgs(func, transforms) {
  const funcsLength = transforms.length//transforms方法长度
  return function(...args) {
    let index = -1//循环索引
    const length = Math.min(args.length, funcsLength)//参数长度和transforms长度中小的那一个
    while (++index < length) {//循环较小者
      args[index] = transforms[index].call(this, args[index])//用对应的transform处理参数
    }
    return func.apply(this, args)//将处理好的参数传递给func,apply调用后返回结果
  }
}

export default overArgs

 

posted @ 2018-11-29 16:50  hahazexia  阅读(188)  评论(0)    收藏  举报