Advertisement

JavaScript 优雅的 柯里化 转换函数

阅读量:
复制代码
 Array.prototype.创建 = function 创建 () {

    
     var 局_参数列表 = [];
    
     for (var i = 0, j = arguments; i < j.length; i++) 局_参数列表.push (j [i]);
    
     var 局_数组对象 = 局_参数列表.length > 0 ? new Array (局_参数列表 [0]) : [];
    
     return 局_参数列表.length == 1 ? 局_数组对象 : 局_数组对象.fill ([]).推理 (function () {
    
         return this.创建.apply (this, 局_参数列表.slice (1));
    
     });
    
 }
    
  
    
  
    
  
    
 Function.prototype.柯里化 = function 柯里化 () {
    
     var 局_参数列表 = [];
    
     for (var i = 0, j = arguments; i < j.length; i++) 局_参数列表.push (j [i]);
    
     var 局_柯里过程 = function () {
    
         for (var i = 0, j = arguments; i < j.length; i++) 局_参数列表.push (j [i]);
    
         return this.柯里化.apply (this, 局_参数列表);
    
     }.bind (this);
    
     局_柯里过程.取计算结果 = 局_柯里过程.取结果 = 局_柯里过程.取数据 = 局_柯里过程.get = 局_柯里过程.返回 = 局_柯里过程 ["return"] = function () {
    
         return this.apply (this, 局_参数列表);
    
     }.bind (this);
    
     return 局_柯里过程;
    
 }

用法:

复制代码
 var data = [].创建.柯里化 (3) (2, 4) (5).return ();

    
  
    
 console.log (data);

结果:

[Array(2), Array(2), Array(2)]

其它接收连续参数的函数,也可以柯里化,例如:

复制代码
 function 累加 () {

    
     if (arguments.length == 0) return 0;
    
     var 局_计算结果 = typeof (arguments [0]) == "string" ? "" : 0;
    
     for (var i = 0, j = arguments; i < j.length; i++) 局_计算结果 += j [i];
    
     return 局_计算结果;
    
 }
    
  
    
  
    
  
    
 var 调用 = call = function 调用 () {
    
     var 局_参数列表 = [];
    
     for (var i = 0, j = arguments; i < j.length; i++) 局_参数列表.push (j [i]);
    
     var 局_柯里过程 = function () {
    
         for (var i = 0, j = arguments; i < j.length; i++) 局_参数列表.push (j [i]);
    
         return 调用.apply (this, 局_参数列表);
    
     }
    
     局_柯里过程.取计算结果 = 局_柯里过程.取结果 = 局_柯里过程.取数据 = 局_柯里过程.get = 局_柯里过程.返回 = 局_柯里过程 ["return"] = function () {
    
         return 局_参数列表.length > 0 ? 局_参数列表 [0].apply (this, 局_参数列表.slice (1)) : undefined;
    
     }
    
     return 局_柯里过程;
    
 }
    
  
    
  
    
 调用 (累加) (1, 2) (3) () (4, 5).return ();
    
  
    
 累加.柯里化 (1, 2) (3) () (4, 5).return ();

全部评论 (0)

还没有任何评论哟~