我最近看了一篇关于Object.prototype.valueOf() on MDN和感觉他们得到的东西完全错误的说:混淆方法Object.prototype.valueOf()
的
valueOf()
方法返回指定的原始值目的。
我的意思是,这句话会做出一些意义,如果我们谈论这个方法的更具体的版本,例如String.prototype.valueOf()
,这是在原型链更紧密,因此将被调用,而不是Object.prototype
方法,当调用String
对象的valueOf
方法时。在这种情况下,将运行内部算法thisStringValue
并且将返回对象的内部属性[[StringData]]
的值,即基元串值。所以这实际上是从对象到原始值的转换。
但据我了解,中Object.prototype
的valueOf
方法的工作原理完全相反方式,通过调用内部方法ToObject
。
现在,如果Object.prototype.valueOf()
是建立在普通的对象调用时,它将调用ToObject
传入的方法中,它指向对象本身的该值,并且在这种情况下,ToObject
将只返回在物体上的参考,通过toString()
显示为[object Object]
。
假设我们将覆盖String.prototype.valueOf()
的值,例如Object.prototype
的相关方法,然后通过调用构造函数创建String
对象。 - 如果我们现在调用valueOf()
,我们将返回一个对象,而不是我们作为参数传入的原始字符串值。就我所见,Object.prototype.valueOf()
中只有ToObject
,没有从对象到原始值的转换。
所以我得到这个权利,他们是错的,还是我谁不明白它?
有你那页的小黄***注上阅读***? –
@ RokoC.Buljan只需将String.prototype.valueOf()替换为Number.prototype.valueOf()即可。它是同样的事情:如果通过调用具有参数5的构造函数创建一个Number对象并调用本地valueOf()方法,则会将数字5作为原始值。如果用Object.prototype.valueOf()覆盖Number方法,则会得到一个对象作为返回值。没有区别。 – SickBoy
如果一个对象没有在原型链中覆盖这个方法,它的“原始值”就是对象本身。 – Barmar