js反柯里化个人理解以及操作
2021-05-11 12:28
标签:nbsp his bin bind reduce OLE sel class 字符 学过js的都知道原型是js的灵魂,我刚接触原型的时候觉得还挺绕的,然后看了一系列的解释然后自己理了一下思路,总算是清晰了,今天我弄了一下柯里化和反柯里化,对反柯里化结合原型链有了一定的认识,一下是我所总结的。 反柯里化,个人解释就是通过添加对象或者函数的原型的方法,让原本使用范围具有局限性的一段代码能够适用范围更广,例如,数组的reduce,map,foreach这些函数都只能通过数组对象使用,如果字符串要使用其方法,必须通过call,bind,apply的方式去修改函数的调用主体,但是我们完全可以自己封装然后添加到函数的原型对象中,这样任何类型使用数组的方法都能直接调用,具体实现方法如下: 上面的代码很简单,先在Function里面添加一个原型方法,返回一个函数,this是我们后面要写的实例对象,obj指的是调用主体,在这里我们将接受的主体全部修改成了数组类型(无论哪种类型变成了数组类型就能使用数组的方法了),rest指的是传入的剩余参数,然后以obj为主体调用实例对象传入剩余参数作为返回,得到了一个可以作用在其他主体上的函数。 下面我们以foreach举例实例化函数: 第一行forEach原型上有了一个uncurrying的方法,且执行了其函数 最后结果为 a s d 不仅仅是forEach,我们如果用reduce,fifter一样的: 总结:反柯里化如果用的好能够自己封装很多局限性的函数,其思想很优秀 js反柯里化个人理解以及操作 标签:nbsp his bin bind reduce OLE sel class 字符 原文地址:https://www.cnblogs.com/388ximengpy/p/12054419.htmlFunction.prototype.uncurrying = function(){
const self = this
return function () {
let obj = [].shift.call(arguments)
let rest = arguments
return self.apply(obj, rest)
}
}
1 let forEach = [].forEach.uncurrying()
2
3 forEach("asd", function (item) {
4 console.log(item)
5 })
1 let reduce = [].reduce.uncurrying()
2 let filter = [].filter.uncurrying()
3 let ans = reduce("123", (a, b) => {
4 return a*1+b*1
5 }, 0) // 6
上一篇:JS开发——文件夹的上传和下载
下一篇:CSS颜色