js链式调用

链式调用实现加减乘除

1
2
3
4
5
6
7
8
9
10
class utils {
chain(a) {this.val = a;return this;}
add(b) {this.val += b;return this;}
sub(c) {this.val -= c;return this;}
mult(d){this.val *= d;return this;}
divi(e){this.val /= e;return this;}
value() {return this.val;}
}
let util = new utils();
console.log(util.chain(1).add(2).sub(1).mult(2).divi(2).value()); //2

链式调用实现不定参相加

1
2
3
4
5
6
7
8
9
10
11
12
13
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

柯里化实现链式相加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function add() {
var [arrayArguments,args] = [[],''];
//拼接参数数组,获取第一个参数
//将类数组参数转化为数组
args = Array.prototype.slice.call(arguments);
arrayArguments = arrayArguments.concat(args);
var getAllArguments = function(){
//拼接参数数组
args = Array.prototype.slice.call(arguments);
arrayArguments = arrayArguments.concat(args);
return getAllArguments;
}
getAllArguments.toString = function(){
var sum = arrayArguments.reduce((pre,next)=>{
return pre+next;
})
return sum
}
return getAllArguments;
}
console.log(add(1)(2)(3)); //6
console.log(add(1,2)(3)); //6
console.log(add(1,2,3)(4,5)(6)); //21