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)
还没有任何评论哟~
