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);
我期望得到alert
和console.log
的64
。 但它只适用于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);