console.log和valueOf

试图解决一个小任务后,我有点困惑的console.log函数的奇怪行为。 我期望console.log将使用valueOf函数作为对象转换为原始值。 但是我错了…

最好用一个例子来解释。

 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); 

我期望得到alertconsole.log64 。 但它只适用于alert ,你可以在jsfiddle中看到: http : //jsfiddle.net/3yhrnrnL/

console.log的情况下,我总是得到像“functionB()”,而不是64 。 有人可以解释为什么会发生,如何解决? 谢谢!

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

为了让你的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);