一、基本原理解釋:
- 所有對象(包括函數(shù))都是通過
__proto__
指向某個原型對象
- 所有對象(除了null)都會通過
__proto__
直接或間接的指向無名的花對象
湘捎。 - 每個函數(shù)都會額外具備一個
prototype
的指針尿招,指向到那個原型對象
矾柜。 - 由
new 函數(shù)名()
產(chǎn)生的對象阱驾,其__proto__
就會指向那個原型對象
。 -
原型對象
所有的成員都會被指向它的那些對象訪問到(直接或間接)怪蔑,所以可以認(rèn)為:函數(shù)是對象的工廠里覆。 - 針對
原型對象
的讀策略是:依鏈查找,直到找到花對象
缆瓣;而寫策略是:直接在對象本身進(jìn)行掛載或覆蓋喧枷。
二、進(jìn)階的認(rèn)知:
- 函數(shù)自身也是對象弓坞,其
__proto__
指向的對象是一個名字為Function
的函數(shù)的prototype
指向的對象隧甚,所以可以認(rèn)為Function
是函數(shù)的工廠,可以如下描述:
var Object=new Function();
var Date=new Function();
當(dāng)然渡冻,如果是我們自定義的函數(shù)本質(zhì)上是如下方式定義的:
var Person=new Function();
傳參和函數(shù)體如下:
var Person=new Function("name","this.name=name");
- JS的設(shè)計(jì)者要完成:
Function
自身是函數(shù)戚扳,但也是對象的目標(biāo),所以最后提出以下設(shè)想:Function對象
是是Function函數(shù)
產(chǎn)生的菩帝!基于以上設(shè)想咖城,將Function
做為對象使用的__proto__
指向到Function
做為函數(shù)的__prototype__
,完成全部的設(shè)計(jì)呼奢。