使用不同的调用方式调用Javascript函数

使用不同的调用方式调用Javascript函数,javascript,function,Javascript,Function,我想用javascript实现这个函数,比如说Add,它应该支持以下格式 add(a,b,c) add(a)(b)(c) add(a)(b,c) add(a,b)(c) 所有这些都应返回a+b+c。可能吗?如果是这样,怎么做?你可以做类似的事情 函数添加(){ 设和=0; 对于(参数的e)和+=e; 设ret=add.bind(null,sum); ret.toString=()=>sum; ret.valueOf=()=>sum; 返回ret; } 设x=+加(2,3)(4)(11) 控制

我想用javascript实现这个函数,比如说
Add
,它应该支持以下格式

add(a,b,c)
add(a)(b)(c)
add(a)(b,c)
add(a,b)(c)

所有这些都应返回
a+b+c
。可能吗?如果是这样,怎么做?

你可以做类似的事情

函数添加(){
设和=0;
对于(参数的e)和+=e;
设ret=add.bind(null,sum);
ret.toString=()=>sum;
ret.valueOf=()=>sum;
返回ret;
}
设x=+加(2,3)(4)(11)

控制台日志(x,类型x)您可以执行以下操作

函数添加(){
设和=0;
对于(参数的e)和+=e;
设ret=add.bind(null,sum);
ret.toString=()=>sum;
ret.valueOf=()=>sum;
返回ret;
}
设x=+加(2,3)(4)(11)

控制台日志(x,类型x)每当函数运行时,将参数收集到数组中,并检查其长度。如果数组长度为3或更大,则使用将前3个数字相加。如果不是,则返回函数

函数添加(){
var args=[];//收集参数
函数innerAdd(){
args.push.apply(args,参数);//将参数添加到args
//如果参数的长度小于3,则返回innerAdd,如果不是,则对前3个数字求和
返回args.length<3?innerAdd:args.slice(0,3).reduce(函数(s,n){
返回s+n;
});
}
返回innerAdd.apply(null,参数);//使用当前参数调用innerAdd
}
变量a=1,b=2,c=3;
控制台日志(添加(a、b、c));
控制台日志(添加(a)(b)(c));
控制台日志(添加(a)(b,c));

控制台日志(添加(a,b)(c))每当函数运行时,将参数收集到数组中,并检查其长度。如果数组长度为3或更大,则使用将前3个数字相加。如果不是,则返回函数

函数添加(){
var args=[];//收集参数
函数innerAdd(){
args.push.apply(args,参数);//将参数添加到args
//如果参数的长度小于3,则返回innerAdd,如果不是,则对前3个数字求和
返回args.length<3?innerAdd:args.slice(0,3).reduce(函数(s,n){
返回s+n;
});
}
返回innerAdd.apply(null,参数);//使用当前参数调用innerAdd
}
变量a=1,b=2,c=3;
控制台日志(添加(a、b、c));
控制台日志(添加(a)(b)(c));
控制台日志(添加(a)(b,c));

控制台日志(添加(a,b)(c))这是可能的,您将需要使用
参数
objectIt如果可能,您将需要使用
参数
objectIt返回函数;(参见编辑答案这是更好的答案,因为它不限于3..它返回一个函数;(参见编辑答案这是更好的答案,因为它不限于3。。