在尝试解决一个小任务后,我对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);
我希望获得64
和alert
中的console.log
。但它只适用于alert
,你可以在jsfiddle看到:http://jsfiddle.net/3yhrnrnL/
在console.log
的情况下,我总是得到类似"函数b()"而不是64
。有人可以解释一下为什么会发生这种情况以及如何解决它?谢谢!
答案 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);