每創(chuàng)建一個函數(shù),該函數(shù)都會自動帶有一個prototype屬性矢否。該屬性是一個指針仲闽,指向一個對象,該對象稱之為原型對象(后期我們可以使用這個原型對象幫助我們在js中實(shí)現(xiàn)繼承).
原型對象上默認(rèn)有一個屬性constructor,該屬性也是一個指針僵朗,指向其相關(guān)聯(lián)的構(gòu)造函數(shù)赖欣。
通過調(diào)用構(gòu)造函數(shù)產(chǎn)生的實(shí)例對象,都擁有一個內(nèi)部屬性验庙,指向了原型對象顶吮。其實(shí)例對象能夠訪問原型對象上的所有屬性和方法。
總結(jié):三者的關(guān)系是粪薛,每個構(gòu)造函數(shù)都有一個原型對象悴了,原型對象上包含著一個指向構(gòu)造函數(shù)的指針,而實(shí)例都包含著一個指向原型對象的內(nèi)部指針汗菜。通俗的說让禀,實(shí)例可以通過內(nèi)部指針訪問到原型對象,原型對象可以通過constructor找到構(gòu)造函數(shù)陨界。
關(guān)系圖:
完整的原型鏈
兩個關(guān)鍵的點(diǎn):
1.任何構(gòu)造函數(shù)巡揍,都是Function構(gòu)造出來的。所以O(shè)bject和Person的構(gòu)造函數(shù)是Function實(shí)例化出來
2.任何對象都是繼承自object菌瘪,實(shí)際上腮敌,繼承都是通過prototype來實(shí)現(xiàn)繼承的,因?yàn)閷?shí)例對象查找屬性或者方法俏扩,會從__proto__找糜工。
3.__proto__,統(tǒng)一指向prototype對象录淡。
對上述的圖進(jìn)行一個描述:
1.首先Person構(gòu)造函數(shù)捌木,實(shí)例對象,prototype互指
2.Object三者互指
3.Function復(fù)制實(shí)例化Object和Person嫉戚,所以O(shè)bject和Person構(gòu)造函數(shù)的__proto__指向Fucntion的prototype對象
4.然后所有的對象都是繼承自O(shè)bject刨裆,所以Person和Function的prototype的__proto__都指向Object的prototype
版權(quán)聲明:本文為CSDN博主「落幕高墻」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議彬檀,轉(zhuǎn)載請附上原文出處鏈接及本聲明帆啃。
原文鏈接:https://blog.csdn.net/p13132312312/article/details/102477416