本文介绍JavaScript中实现类似add(1)(2)(3)链式调用的两种方法。第一种通过固定层级嵌套函数实现固定参数求和;第二种利用闭包累加值,并重写函数的toString或valueOf方法,从而支持任意数量参数的连续调用与最终数值获取,解决链式调用返回函数对象的问题。
固定参数链式调用实现
代码如下:
var add = function(a){
return function(b){
return function(c){
return a+b+c;
};
};
};
add(1)(2)(3); //6
这种写法虽然能实现固定参数的链式调用,但如果需要像add(1)(2)(3)(4)这样处理四个或更多参数的情况,上述固定层级的写法显然不再适用。
为了实现支持任意参数数量的链式调用,核心思路是执行一个函数后返回函数自身,从而允许继续接收参数。
支持任意参数的链式调用方案
代码如下:
function add(x) {
var sum = x;
var tmp = function (y) {
sum = sum + y;
return tmp;
};
tmp.toString = function () {
return sum;
};
return tmp;
}
console.log(add(1)(2)(3)); //6
console.log(add(1)(2)(3)(4)); //10
然而,上述代码在计算完成后仍然返回tmp函数对象,无法直接获取数值结果。在JavaScript中,当对对象进行打印或数学运算时,引擎会分别调用toString或valueOf方法。因此,我们需要重写tmp函数的toString(以及可选的valueOf)方法,使其返回累加的sum值,从而在链式调用结束时输出正确的数字结果。
以上就是本文的全部内容了,希望大家能够喜欢。