我有一个简单的效用函数,它以currying的方式将任意数量的数字相乘。我也为内部函数设置了valueOf,所以现在console(mult(10)(3)(2)应该显示“60”。但它实际显示的是“函数60”。这是不正确的使用方法?或valueOf不适用于函数?
以下是代码:
var mult = function (y) {
var that = this;
that.x = y;
that.f = function(s) {
that.x = that.x * s;
return that.f;
}
that.f.valueOf = function (){return that.x;};
return that.f;
}
答案 0 :(得分:2)
添加valueOf
函数的目的是强制评估最终函数。你可以明确地调用它
console.log(mult(10)(3)(2).valueOf());
或者预先加+
console.log(+mult(10)(3)(2));
var mult = function (y) {
var that = this;
that.x = y;
that.f = function(s) {
that.x = that.x * s;
return that.f;
}
that.f.valueOf = function (){return that.x;};
return that.f;
}
console.log(mult(10)(3)(2))
console.log(mult(10)(3)(2).valueOf())
console.log(+mult(10)(3)(2))
答案 1 :(得分:1)
您需要在console.log语句中调用valueOf()来强制进行评估:
splur(5,'сторінка','сторінки','сторінок') // 5 сторінок
splur(4,'сторінка','сторінки','сторінок') // 4 сторінки
splur(1,'сторінка','сторінки','сторінок') // 1 сторінка
splur(12,'сторінка','сторінки','сторінок') // 12 сторінок
splur(5,'страница','страницы','страниц') // 5 страниц
splur(4,'страница','страницы','страниц') // 4 страницы
splur(1,'страница','страницы','страниц') // 1 страница
splur(12,'страница','страницы','страниц') // 12 страниц