JS中每個(gè)函數(shù)都可以看成一個(gè)對(duì)象,而原型(prototype)就是函數(shù)中的其中一個(gè)屬性。這里要很清楚,原型是函數(shù)上面的一個(gè)屬性,這個(gè)屬性只有函數(shù)對(duì)象才能擁有,別的類型是沒有prototype屬性。而原型的作用就是它所引用的對(duì)象能夠被擁有它的函數(shù)所構(gòu)建的實(shí)例化對(duì)象所訪問。
那么原型是怎么和對(duì)象建立聯(lián)系的?
編寫代碼如下:
我們在程序中定義一個(gè)JavaScript對(duì)象,然后打印這個(gè)對(duì)象,這里除了前面定義的name屬性外,還有另外一個(gè)__proto__屬性。前面說道 函數(shù) 上面的 prototype(原型)所指向的對(duì)象能夠擁有它的函數(shù)所構(gòu)建的實(shí)例化對(duì)象所訪問。至于具體怎么訪問的細(xì)節(jié)沒有說明。其實(shí)就是通過__proto__這個(gè)屬性作為橋梁進(jìn)行的聯(lián)接。
對(duì)比發(fā)現(xiàn)__proto__所指的對(duì)象和Object.prototype所指的是一樣的。我們是可以認(rèn)定__proto__就是這座橋梁,那么obj就能訪問到Object.prototype所指的對(duì)象就是理所當(dāng)然了。
于是我就在猜測在使用直接定義量去定義對(duì)象的時(shí)候,在底層的實(shí)現(xiàn)很有可能就是通過new Object()的這種方式實(shí)現(xiàn)的。
于是我編寫了下面的測試代碼:
發(fā)現(xiàn)上面的obj與obj1兩者數(shù)據(jù)結(jié)構(gòu)基本一致。
更多網(wǎng)頁前端開發(fā)教程,行業(yè)資訊,面試技巧,歡迎關(guān)注公眾號(hào):qdkfmiji
記得點(diǎn)個(gè)贊