javascript
一张图看透JavaScript原型关系:__proto__(对象原型)和prototype(函数原型)
問(wèn):函數(shù)豈不是擁有兩個(gè)原型?
答:是的,函數(shù)有兩個(gè)原型proto和prototype。
因?yàn)楹瘮?shù)是對(duì)象,而對(duì)象就有原型,其原型就是proto。函數(shù)是Function的實(shí)例,所以此原型就是Function.prototype。
而函數(shù)的prototype,不是給自己用的,而是給自己實(shí)例用的。
問(wèn):到底是構(gòu)造函數(shù)有原型,還是實(shí)例有原型?
答:關(guān)鍵是這個(gè)“有”字怎么解釋。說(shuō)白了,就是擁有權(quán)和使用權(quán)的區(qū)分。平常我們說(shuō)話時(shí),并不仔細(xì)區(qū)分二者。
就像我們經(jīng)常會(huì)說(shuō),“你的公司在哪里?”,但我們都知道,公司并不是你的,是屬于董事會(huì)的,你只是在那上班罷了。
又比如,你有輛跑車,但你從來(lái)不開它,卻給你的親朋好友開。你有擁有權(quán),但沒(méi)使用權(quán)。相反,你的好友雖沒(méi)有擁有權(quán),但有使用權(quán)。
從一般語(yǔ)義上來(lái)說(shuō),構(gòu)造函數(shù)擁有原型,放在自身prototype上,但不是給自身用的,而是給它的實(shí)例用的。
從JS的語(yǔ)義上來(lái)說(shuō),實(shí)例對(duì)象擁有原型,其內(nèi)部屬性[[prototype]](即proto指向)指向構(gòu)造器的prototype。
另外一點(diǎn),擁有權(quán)是獨(dú)占的,而使用權(quán)是共享的。
因此某一個(gè)構(gòu)造函數(shù)的不同實(shí)例的原型是同一個(gè)。
問(wèn):原型鏈的終點(diǎn)是什么?
答:Object.prototype。它是個(gè)對(duì)象,它的原型是null。
問(wèn):函數(shù)都是Function的實(shí)例,而Function也是函數(shù),它是誰(shuí)的實(shí)例?
答:它是自身的實(shí)例。所以它的proto與自身的prototype是同一個(gè)東西。而且是個(gè)函數(shù),此函數(shù)不再有prototype,但是作為對(duì)象,它的proto是Object.prototype。這是系統(tǒng)內(nèi)置好的。
問(wèn):Object.proto和Object.prototype是什么關(guān)系?
答:后者是前者的原型。因?yàn)镺bject是函數(shù),是Function的實(shí)例,因此Object.proto就是Function.prototype,所以后者是前者的原型。
請(qǐng)尊重原創(chuàng),原文鏈接:http://www.qdfuns.com/notes.php?mod=view&u=17398&id=6962d01d88c6b73ea606662fd397b6f6
總結(jié)
以上是生活随笔為你收集整理的一张图看透JavaScript原型关系:__proto__(对象原型)和prototype(函数原型)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 前端面试中常见的算法问题
- 下一篇: gradle idea java ssm