1, 只有函數(shù)有prototype這個(gè)屬性.屬性值是 一個(gè)有constructor屬性的對(duì)象.
2 new 通過(guò)new關(guān)鍵字創(chuàng)建一個(gè)實(shí)例的時(shí)候,實(shí)例繼承構(gòu)造函數(shù)prototype上的所有屬性和方法.方法是 :通過(guò)設(shè)置自己的__proto__指向構(gòu)造函數(shù)的prototype.
3, 構(gòu)造函數(shù)通過(guò)prototype來(lái)存儲(chǔ)要共享的屬性和方法.也可以設(shè)置prototype指向現(xiàn)存的對(duì)象A來(lái)繼承A對(duì)象的屬性和方法
4, 對(duì)象的__proto__總是指向構(gòu)造該對(duì)象的函數(shù)的原型prototype.
在上圖中,構(gòu)造函數(shù)Foo既有prototype屬性,也有__proto__屬性.prototype屬性是es規(guī)范的規(guī)定,是一個(gè)對(duì)象,包含在構(gòu)造函數(shù)定義(不需要等到執(zhí)行)的
時(shí)候就自動(dòng)生成的一個(gè)包含constructor屬性的對(duì)象.如下圖,以及需要共享的屬性和方法.
上面說(shuō)到,實(shí)例的__proto__屬性的值是該實(shí)例的構(gòu)造函數(shù)的prototype,所以f1和f2實(shí)例的__proto__就是他們的構(gòu)造函數(shù)Foo的原型prorotype.
構(gòu)造函數(shù)Foo本身即是函授,也是對(duì)象,所以也有__proto__屬性,該屬性的值就是能夠構(gòu)造Foo函數(shù)的構(gòu)造函授的prototype,那么Foo函數(shù)由誰(shuí)構(gòu)造呢?
從上圖可以看出,是function Function(){},所以構(gòu)造函數(shù)Foo的__proto__指向他的構(gòu)造函數(shù) Function的原型Function.prototype.整體脈絡(luò)很清晰,但
是有兩個(gè)要注意的點(diǎn).一個(gè)是Function構(gòu)造函授的__proto__和prototype都是指向Function.prototype.同時(shí),Object構(gòu)造函數(shù)的__proto__也指向
Function.prototype.由此可以得出結(jié)論: Function的兩個(gè)實(shí)例是Function構(gòu)造函數(shù)和Object構(gòu)造函數(shù).Object可以理解,Function是什么原因?