每創(chuàng)建一個(gè)函數(shù),該函數(shù)都會(huì)自動(dòng)帶有一個(gè)prototype屬性。該屬性是一個(gè)指針,指向一個(gè)對(duì)象,該對(duì)象稱之為原型對(duì)象(后期我們可以使用這個(gè)原型對(duì)象幫助我們?cè)趈s中實(shí)現(xiàn)繼承).
原型對(duì)象上默認(rèn)有一個(gè)屬性constructor,該屬性也是一個(gè)指針,指向其相關(guān)聯(lián)的構(gòu)造函數(shù)。
通過調(diào)用構(gòu)造函數(shù)產(chǎn)生的實(shí)例對(duì)象,都擁有一個(gè)內(nèi)部屬性,指向了原型對(duì)象。其實(shí)例對(duì)象能夠訪問原型對(duì)象上的所有屬性和方法。
總結(jié):三者的關(guān)系是,每個(gè)構(gòu)造函數(shù)都有一個(gè)原型對(duì)象,原型對(duì)象上包含著一個(gè)指向構(gòu)造函數(shù)的指針,而實(shí)例都包含著一個(gè)指向原型對(duì)象的內(nèi)部指針。通俗的說,實(shí)例可以通過內(nèi)部指針訪問到原型對(duì)象,原型對(duì)象可以通過constructor找到構(gòu)造函數(shù)。
關(guān)系圖:

完整的原型鏈
兩個(gè)關(guān)鍵的點(diǎn):
1.任何構(gòu)造函數(shù),都是Function構(gòu)造出來的。所以O(shè)bject和Person的構(gòu)造函數(shù)是Function實(shí)例化出來
2.任何對(duì)象都是繼承自object,實(shí)際上,繼承都是通過prototype來實(shí)現(xiàn)繼承的,因?yàn)閷?shí)例對(duì)象查找屬性或者方法,會(huì)從__proto__找。
3.__proto__,統(tǒng)一指向prototype對(duì)象。

對(duì)上述的圖進(jìn)行一個(gè)描述:
1.首先Person構(gòu)造函數(shù),實(shí)例對(duì)象,prototype互指
2.Object三者互指
3.Function復(fù)制實(shí)例化Object和Person,所以O(shè)bject和Person構(gòu)造函數(shù)的__proto__指向Fucntion的prototype對(duì)象
4.然后所有的對(duì)象都是繼承自O(shè)bject,所以Person和Function的prototype的__proto__都指向Object的prototype
版權(quán)聲明:本文為CSDN博主「落幕高墻」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/p13132312312/article/details/102477416