所有對象都有 toString 和 valueOf 屬性,那么我們是否有必要給每個(gè)對象一個(gè) toString 和 valueOf 呢泻肯?
明顯不需要诅炉。
JS 的做法是把 toString 和 valueOf 放在一個(gè)對象里(暫且叫做公用屬性組成的對象)
然后讓每一個(gè)對象的 --proto-- 存儲(chǔ)這個(gè)「公用屬性組成的對象」的地址。這樣做也可以節(jié)省內(nèi)存空間夺艰。
原型:
每個(gè)對象都擁有一個(gè)隱藏的屬性prototype捍岳,指向它的原型對象富寿,這個(gè)屬性可以通過--proto-- 來訪問。
訪問對象的屬性時(shí)锣夹,JavaScript會(huì)首先在對象自身的屬性內(nèi)查找页徐,若沒有找到,則會(huì)跳轉(zhuǎn)到該對象的原型對象中查找银萍。
原型鏈的形成是真正是靠--proto-- 而非prototype变勇;
重要公式:
var 對象 = new 函數(shù)()
對象.--proto-- === 函數(shù).prototype
1.png
(PS:還有一點(diǎn)點(diǎn)疑惑,明白后再修改)