很久以前我在犀牛书中看到了关于对象的toString和valueOf的解释,如果,对象是日期对象则先调用toString,如果没有返回原始数据(null,undefined之类的),就会继续调用valueOf,如果还没有则报错。对于非日期对象(如数组)之类的,则是先valueOf,在toString,我自己也写了一些代码做过测试,确实没有问题。
今天,我自己写代码的时候,就发现了一个有出入的地方。
function A() {}
A.prototype.toString = function() {
return 123;
}
A.prototype.valueOf = function() {
return 321;
}
var tempObj = new A();
console.log(A)
按道理来说,我这里的A肯定不会是Date类型的,应该是先调用valueOf返回321,但是结果却是123(即先调用了toString)。
是我记错了,还是说,valueOf和toString的调用是根据场景来的,而不是简单的先后顺序?
九州编程
相关分类