前言:本篇以上一片篇基礎(chǔ)绒障,逐漸引出_ _ proto_ _和prototype的概念髓废。而且還是那句話,初學(xué)者拋開你們之前看到的各種有關(guān)于原型原型鏈的概念赂毯,那種很正經(jīng)的概念很容易把人繞暈糖赔。最后畫圖不易萍丐,轉(zhuǎn)載請注明出處。謝謝~
關(guān)鍵詞:_ _ proto_ _,prototype......
正文:
既然是圖解放典,那我們就直接上圖來說明逝变,簡單易懂。
現(xiàn)在刻撒,我們還是承接上文骨田,
1、
現(xiàn)在有s,b,o三個對象声怔,按照文章一所說态贤,那他們每一個相對應(yīng)的堆里面都有一個toString和valueOf。發(fā)現(xiàn)有什么問題了嗎醋火,看內(nèi)存圖吧悠汽。
var s = new String('Hi');
var b = new Boolean(true);
var o = new Object();
內(nèi)存圖一:
好吧,那既然這樣芥驳,我們就把它提出來就好嘍柿冲,:
2、想知道js里具體咋用看這里~~
var o = new Object();
o1.name = "beyrl"
o1.age = "18"
內(nèi)存圖二:
當(dāng)當(dāng)當(dāng)當(dāng)~~兆旬,
就是這樣一個隱藏屬性指向了這個公用屬性假抄。那這樣一個proto是不是有在哪里見過的感覺呢,看下圖~
好丽猬,有沒有一個大概了解呢宿饱,先出一道題考考你們:
eg:
問:1、o1 === o2? 2脚祟、o1.toString === o2.toString ?
var o1 = new Object()
var o2 = new Object()
這種問題怎么回答呢谬以,那我們還是來畫內(nèi)存圖吧,聽我的由桌,不會就畫圖为黎。
從這個內(nèi)存圖中邮丰,我們可得知,A1肯定和A2不等铭乾,所以剪廉,o1和o2肯定就不一樣。但是o1.toString和o2.toString都是指向了公用屬性的toString()片橡,所以肯定相等妈经。
3.到這里,你們應(yīng)該對這個proto有一個基本的印象了捧书。但是現(xiàn)在,我有一個問題要問你們骤星,一個Number经瓷,應(yīng)該還會有很多除了toString(),valueOf()等其他的方法洞难,比如說舆吮,有些人知道還有toFixed等等。那這些專屬于number的這些方法队贱,去哪了呢色冀?老辦法,內(nèi)存圖:
var n1 = new Number()
var o1 = new Object()
4.上面只列舉了一個number共有的柱嫌,內(nèi)存圖锋恬,而事實(shí)上還有String共有的,布爾Boolean共有的编丘,与学,,大概就是如下的一個內(nèi)存圖:
再來一個比較形象些的:
那object的共有屬性嘉抓,String的共有屬性索守,number的共有屬性,Boolean的共有屬性抑片,這些本質(zhì)上都是哈希卵佛,那這些屬性是怎么出現(xiàn)的?我的意思是敞斋,是不是在一開始瀏覽器就把他們準(zhǔn)備好了呢截汪?
現(xiàn)在,要想起我在瀏覽器的垃圾回收機(jī)制中的知識點(diǎn):
如果一個哈希沒有被引用渺尘,那么就要被瀏覽器的垃圾回收機(jī)制回收挫鸽。
那么現(xiàn)在問題來了,到底是誰在引用它們鸥跟,導(dǎo)致他們沒有消失呢丢郊?就是這個:
說白了盔沫,object.prototype就是object的共有屬性,換一個名字就叫做