我看到某大神說(shuō)JavaScript的三座大山:
1框沟、原型與原型鏈
2雇毫、上下文環(huán)境與作用域
3恒界、單線程與異步
說(shuō)的非常正確,原型與原型鏈可以說(shuō)是JS非常不容易理解的內(nèi)容了车胡,想要成為大神檬输,這三座大山是必須要跨越,今天我們就來(lái)翻一下第一座大山——原型與原型鏈
每一個(gè)函數(shù)匈棘,都有一個(gè)prototype屬性丧慈;每一個(gè)對(duì)象,都有一個(gè)proto屬性主卫。
我們來(lái)聲明一個(gè)函數(shù)foo,看看它的prototype是什么:
在瀏覽器控制臺(tái)我們得到了我們的結(jié)果:
我們熟知的JS內(nèi)置對(duì)象逃默,String、Number簇搅、Array等完域,都是由構(gòu)造函數(shù)定義的,用typeof驗(yàn)證他們都是function瘩将,既然是function肯定都有prototype屬性吟税。
其實(shí)prototype屬性是一個(gè)指針,指向一個(gè)對(duì)象姿现,我們上面說(shuō)了乌妙,每一個(gè)對(duì)象都有一個(gè)proto屬性,
我們看看Array.prototype.proto指向誰(shuí)建钥。
大家看到指向了Object.prototype。那Object.prototype又指向誰(shuí)呢虐沥?
指向了null熊经,也就是說(shuō),原型鏈的頂端是null欲险,“萬(wàn)物皆空”嘛镐依!_
原型鏈就是通過(guò)隱形的proto鏈接以來(lái)的,繼承也是隱形的proto實(shí)現(xiàn)的天试,instanceof也是通過(guò)隱形的proto一級(jí)一級(jí)向上查找的槐壳。今天就說(shuō)這么多吧!大家可以上網(wǎng)查一下原型與原型鏈的指向圖喜每,相信你會(huì)有一個(gè)更深的認(rèn)識(shí)务唐。