javascript实现函数柯里化与反柯里化过程解析(3)

Function.prototype.unCurrying = function () { var self = this; return function () {     //[].slice.call(arguments,1)===Array.prototype.push.slice.call(arguments,1)===arguments.slice(1) return self.apply(arguments[0], [].slice.call(arguments, 1)); }; }; var push = Array.prototype.push.uncurrying() console.log(push); push(obj,2) //{0: 1, 1: 2, length: 2} console.log(obj);

分析一下:

1、首先在Function原型对象上添加uncurrying方法,这样所有的Function都可以借用;

2、返回一个闭包内部函数

3、闭包函数返回的结果中返回的是调用方法,self指向Array.prototype.push,apply方法中第一个参数是更改指向,对应下面push(obj,2)相当于更改指向为obj.push(2)

4、apply方法中第二个参数的call方法是更改指向为arguments,并且arguments中能使用slice方法,等于arguments.slice(1)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/e924212a2eab633681c8cb00d34505b1.html