人有兩個(gè)寶,雙手和大腦。雙手會(huì)吃飯,大腦會(huì)思考,會(huì)宕機(jī),會(huì)重啟,還會(huì)需要常常更新維護(hù)。我的腦子就像接觸不良的電路,又好像常常斷觸的屏幕。回路不一定閉合哈,常常卡殼。關(guān)于構(gòu)造函數(shù)原型一類的知識(shí),應(yīng)該是每個(gè)前端的基本功。在我腦子里,學(xué)的時(shí)候會(huì)七八成,現(xiàn)在就剩兩成不到了。概念又不太清晰了,就常復(fù)習(xí)鞏固,走走回頭路。上鏈接:幫你徹底搞懂JS中的prototype、__proto__與constructor(圖解)?。 看完后,感覺(jué)自己又懂了七八成了。
函數(shù)都天然擁有prototype 屬性。并且是函數(shù)獨(dú)享的屬性。有且只有函數(shù)擁有。
對(duì)象都天然擁有__proto__ 屬性。
函數(shù)是對(duì)象。
所以函數(shù)既有prototype 屬性,也有__proto__ 屬性。
一個(gè)new出來(lái)的實(shí)例是個(gè)對(duì)象,所以這個(gè)實(shí)例f1,是有__proto__ 屬性的。
這個(gè)實(shí)例和它的構(gòu)造函數(shù)的關(guān)系:
f1.__proto__ === Foo.prototype 。
當(dāng)訪問(wèn)對(duì)象f1的某個(gè)屬性時(shí)候,如果這個(gè)對(duì)象自己沒(méi)有,就去它的構(gòu)造函數(shù)原型上去訪問(wèn)。因?yàn)闃?gòu)造函數(shù)原型是用來(lái)存放它new出來(lái)的對(duì)象實(shí)例們的公用屬性和方法。? 這時(shí)候需要一個(gè)橋梁指向原型,也就是f1對(duì)象的__proto__屬性了。
通過(guò)__proto__屬性將對(duì)象連接起來(lái)的這條鏈路即我們所謂的原型鏈。
補(bǔ)充:關(guān)于constructor
constructor 也是對(duì)象天然擁有的屬性,它是從一個(gè)對(duì)象指向一個(gè)函數(shù),含義就是指向該對(duì)象的構(gòu)造函數(shù)。每個(gè)對(duì)象都有構(gòu)造函數(shù)(本身?yè)碛谢蚶^承而來(lái)),函數(shù)是對(duì)象,當(dāng)然也會(huì)擁有constructor屬性,指向構(gòu)造當(dāng)前構(gòu)造函數(shù)的構(gòu)造函數(shù)。
new 出來(lái)的實(shí)例對(duì)象的constructor 都是指向?qū)嵗臉?gòu)造函數(shù)本身。?
更多的已不想知道了,又抽象又混亂的。俄羅斯套娃和遞歸都不是我喜歡的。