我正在尝试编写一个可以在许多场景中使用的 add 函数。
add(2,2,2) //6
add(2,2,2,2) //8
add(2)(2)(2) // 6
add(2)(2)(2,2).value() //8
add(2,2)(2) + 2 //8
add(2).add(2) //4
add(2,2,2).add(2).add(2,2).value() //12
add(2,2,2).add(2).value() //8
这是我到目前为止:
function add(){
var sum = 0;
for( var i in arguments ){
sum += arguments[i];
}
var ret = add.bind(null, sum);
ret.value = function () {
return sum;
}
ret.add = function () {
for( var i in arguments ){
sum += arguments[i];
}
return sum;
}
ret.valueOf = function(){ return sum; };
return ret;
}
console.log(add(2,2,2));
console.log(add(2,2,2,2));
console.log(add(2)(2)(2));
console.log(add(2)(2)(2,2).value());
console.log(add(2,2)(2) + 2);
console.log(add(2).add(2));
console.log(add(2,2,2).add(2).value());
console.log(add(2,2,2).add(2).add(2,2).value());
我在最后两种情况下遇到了问题:
add(2,2,2).add(2).add(2,2).value() //12
add(2,2,2).add(2).value() //8
如果我想将两个以上的函数链接在一起并将值函数添加到它们中的每一个,似乎我将不得不继续嵌套添加函数,但显然我错过了一些简单的东西,它可以让我尽可能多地链接它们我喜欢并称其为其中任何一个的value。
此外,他们需要始终返回整数(而不是字符串),似乎有时他们这样做,有时他们不这样做?