我正在尝试编写一个在许多情况下都可以工作的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函数添加到每个函数中,那么我似乎必须继续嵌套add函数,但显然我遗漏了一些简单的东西,可以让我尽可能多地链接它们,并对它们中的任何一个调用value。
此外,它们需要总是返回it (而不是字符串),而且似乎有时返回,有时不返回?
发布于 2015-03-08 22:33:32
既然您在ret.add函数中返回了sum,这就是错误出现的原因,请尝试如下所示,希望它能解决您的问题
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 ret;
}
ret.valueOf = function(){ return sum; };
return ret;
}https://stackoverflow.com/questions/28927510
复制相似问题