如何在javascript函数调用中实现任意链? [英] How to achieve arbitrary chain on function call in javascript?

查看:103
本文介绍了如何在javascript函数调用中实现任意链?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经编写了代码来实现

I have written code to achieve

sum(1)(2) //3

代码如下:

function sum(a) {

  return function(b) { 
    return a+b
 }

}

但我没有解决第二个问题,即如何实现任意数量的链函数调用,如:

But I didn't work out the second question, which is how to achieve any arbitrary number of chain function call like:

sum(1)(2) == 3
sum(5)(-1)(2) == 6
sum(6)(-1)(-2)(-3) == 0
sum(0)(1)(2)(3)(4)(5) == 15


推荐答案

通常你会这样做:

var add = function(a,b){
    return a+b;
};

var sum = function(){
    return [].reduce.call(arguments, add);
}

然后你可以写:

sum(1,2,3,4); // 10

但是有可能破解你所追求的功能:

But it is possible to hack the functionality you're after:

var sum = function(x){
    var f = function(y){
        return sum(x+y);
    };
    f.valueOf = function(){
        return x;
    };
    return f;
};

sum(1)(2)(3)(4); // 10

请不要在生产代码中执行此操作!

Just don't do it in production code please!

这篇关于如何在javascript函数调用中实现任意链?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆