我最近看了一篇關於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