很久以前我在犀牛书中看到了关于对象的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的调用是根据场景来的,而不是简单的先后顺序?
添加回答
举报
0/150
提交
取消