js链式调用 柯里化

var d = 1;
d.add(2).add(3).add(4) //输出10

写出这个add函数

Number.prototype.add = function(x){
	return this + x;
        //return this.valueOf() + x;  隐式调用valueOf函数
}

实现add(1)(2)(3) //6

function add(x) {
    var sum = x;
    var tmp = function (y) {
        sum = sum + y;
        return tmp;
    };
    tmp.toString = function () {
        return sum;
    };
    return tmp;
}

实现
add(1)(2) // 3
add(1, 2)(3) // 6
add(1)(2)(3)

function add () {
    var args = [].slice.call(arguments);

    var fn = function () {
        var arg_fn = [].slice.call(arguments);
        return add.apply(null, args.concat(arg_fn));
    }

    fn.valueOf = function() {
        return args.reduce((a, b) => a + b);
    }
    return fn;
}

学习add(1)(2)(3)
js实现类似于add(1)(2)(3)调用方式的方法
一道面试题引发的对javascript类型转换的思考
javaScript链式调用原理以及加法实现

原文地址:https://www.cnblogs.com/fazero/p/7568046.html