自定义valueOf为JS中的函数

时间:2017-07-18 09:57:46

标签: javascript

我有一个简单的效用函数,它以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;
}

2 个答案:

答案 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 страниц

JsFiddle

相关问题