JavaScript手写系列(八)(手写偏函数)

178 阅读1分钟

偏函数

偏函数: 固定一个函数的一个或多个参数, 也就是将一个 n 元函数转换成一个 n - x 元函数

function isType(type, target) {
    return `[object ${type}]` === Object.prototype.toString.call(target)
}

// 将上面函数改造为偏函数(将type参数固定)
// 闭包的一个应用
function isType(type) {
    return function(target) {
        return `[object ${type}]` === Object.prototype.toString.call(target)
    }
}

const isArray = isType('Array') // 这里就是将type参数固定, 形成了一个更小元的函数
const isObject = isType('Object')
isArray([]) // true
isObject({}) // true

偏函数通用写法:

// presetArgs: 将要固定的参数
// laterArgs: 后面传进来的参数
function partial(fn, ...presetArgs) {
  return function(...laterArgs) {
        let allArgs = presetArgs.concat(laterArgs)
        return fn(...allArgs)
  }
}
function isType(type, target) {
    return `[object ${type}]` === Object.prototype.toString.call(target)
}
const isArray = partial(isType, 'Array')
isArray([]) // true