我有以下添加功能,最初出现在这里。
add
只接受一个参数,但它可以通过柯里化和闭包的“魔术”进行“无限”次。
function add (a) {
var f = b => add(a + b);
f.valueOf = () => a;
return f;
}
var add4 = add(2)(2);
var add6 = add4(2);
var add10 = add6(2)(2);
var add14 = add10(2)+2;
//var add16 = add14(2); no longer works because of type conversion above.
console.log(+add4, +add6, +add10, add14);
//logs 4, 6, 10, 14
您可以在上面看到,该函数可以继续创建具有新a
值的函数,这些函数可以继续采用额外的参数。该函数还可以作为普通变量用于数学运算,例如var sum = add(x)+y;
.
但是,一旦发生类型转换,sum
前面示例中的 the 就不再是函数,而是转换为数字。
现在背景已经不碍事了,我的问题是:是否有一种(相对简单的)方法来防止add
函数的类型强制,同时仍然允许它用于算术运算?或者,换句话说,是否有一种简单的方法可以直接修改valueOf
(和/或a
值)而不添加太多样板(最好在保持add(x)+y;
结构的同时)?