美文网首页
js 函数组合

js 函数组合

作者: Veycn | 来源:发表于2019-03-27 14:58 被阅读0次

函数组合的意思是, 一个函数, 参数列表为多个函数, 这个函数返回的是一个整合了多个函数功能的函数。
emmm, 好像有点绕。

function compose(f, g) {
    return function (x) {
        return f(g(x))
    }
}

function toUpperCase(str) {
    return str.toUpperCase()
}

function add(str) {
    return str + '!'
}

let f = compose(add, toUpperCase)
console.log(f('Hello world')); // HELLO WORLD! 

就是这样了。函数 f 是将另外两个函数的功能整合到了一起的一个新函数

function compose() {
    var ags = Array.prototype.slice.call(arguments) // 类数组转数组
    var len = ags.length - 1
    return function (x) {
        var res = ags[len](x)
        while (len--){
            res = ags[len](res)
        }
        return res
    }
}

当不知道要多少个函数组合的时候,使用递归的方式无疑要优雅很多。
似乎这个递归跟数组的 reduce 方法好相似。。。
又开始造作:

function compose() {
    var args = Array.prototype.slice.call(arguments) // 类数组转数组
    return function (x) {
        return args.reduceRight(function (res, cb) {
            return cb(res)
        }, x)
    }
}
// HELLO WORLD!

递归需要倒着进行, 所以使用 reduceRight
顺便补一点 reduce 的使用方法

arr.reduce(function (prev, next, index, arr) {}, initialValue)

如果 reduceRight 就是倒着的,index也是倒序的
在这次应用中, next就是数组里面的各个函数, prev也就成了上一次函数执行的结果。初始值就是之前传递进去的字符串(initialValue)
还可以再造作一下:

const compose = (...args) => x => args.reduceRight((res, cb) => cb(res), x)
let f = compose(add, toUppercase)
f('Hello, world') // HELLO WORLD!

相关文章

  • JS函数组合

    组合原理(逐个执行): 组合实现(执行方向右到左): 组合管道(执行方向左到右):

  • js 函数组合

    函数组合的意思是, 一个函数, 参数列表为多个函数, 这个函数返回的是一个整合了多个函数功能的函数。emmm, 好...

  • js的继承方式

    js的继承方式 一、原型链继承 原型继承的缺点: 二. 构造函数继承 构造函数继承的缺点: 三. 组合式继承 组合...

  • Javascript 继承机制

    一篇文章理解JS继承——原型链/构造函数/组合/原型式/寄生式/寄生组合/Class extendshttps:/...

  • 2019-03-25 继承

    js中通过原型来实现继承 组合继承:原型继承+借用构造函数继承

  • JS寄生组合式继承

    JS的继承方式有很多种,最理想的继承方式是寄生组合式继承。组合继承(构造函数和原型的组合)会调用两次父类构造函数的...

  • Js的继承

    js的继承 @(js)[继承, js, 前端] 组合继承是原性链继承和构造函数继承的合体,它汲取了二者各自的有点,...

  • js基础之实现继承的几种方式

    js 实现继承的方式有: 原型链继承; 构造函数继承; 组合继承(原型链继承 + 构造函数继承)(最常用);(原型...

  • js继承(原型链、构造、组合、寄生组合)

    参考自:一篇文章理解JS继承——原型链/构造函数/组合/原型式/寄生式/寄生组合/Class extends本文是...

  • JS 中的继承

    推荐文章:一篇文章理解JS继承——原型链/构造函数/组合/原型式/寄生式/寄生组合/Class extends[h...

网友评论

      本文标题:js 函数组合

      本文链接:https://www.haomeiwen.com/subject/uuszvqtx.html