console.log和valueOf

时间:2015-08-09 23:57:22

标签: javascript node.js

在尝试解决一个小任务后,我对console.log函数的奇怪行为感到有些困惑。我希望console.logvalueOf函数用作对象到原始值的转换器。但我错了......

最好用一个例子来解释。

Number.prototype.sum = function sum(val) {
    var newVal = this + val;
    var f = sum.bind(newVal);
    f.valueOf = f.toString = function () {
        return newVal;
    };
    return f;
};

var numb = 50;
var res = numb.sum(10)(2)(2);
console.log(res);
alert(res);

我希望获得64alert中的console.log。但它只适用于alert,你可以在jsfiddle看到:http://jsfiddle.net/3yhrnrnL/

console.log的情况下,我总是得到类似"函数b()"而不是64。有人可以解释一下为什么会发生这种情况以及如何解决它?谢谢!

1 个答案:

答案 0 :(得分:2)

javascript alert需要一个字符串,如果没有提供字符串,它会尝试将该值转换为字符串。

要使console.log工作,您可以简单地使用parseInt()函数,如此

Number.prototype.sum = function sum(val) {
    var newVal = this + val;
    var f = sum.bind(newVal);
    f.valueOf = f.toString = function () {
        return newVal;
    };
    return f;
};

var numb = 50;
var res = numb.sum(10)(2)(2);
console.log(parseInt(res));
alert(res);