1. 程式人生 > >實例對象、構造函數、原型之間的關系

實例對象、構造函數、原型之間的關系

http 實例化 call 並且 mic ima 自己的 function 瀏覽器

實例對象、構造函數和原型之間的關系

技術分享

實例對象

技術分享

技術分享

實例對象中只有__proto__屬性,所有的實例都指向自己構造函數的原型。__proto__屬性裏面有構造器construction和__proto__。

構造器指向原型所屬的構造函數,__proto__屬性指向Object的原型。

實例對象裏面有一個特例:

技術分享

這個是一個特例,裏面有prototype和__proto__倆個屬性,__proto__指向Function的原型,prototype是一個單純的對象,是一個Object的實例,相當於{},就是一個普通對象,裏面有2個屬性,construction和__proto__,後者指向了Object的原型,construction指向了Function,即自己的構造函數。

------------------------------------------------------

構造函數

技術分享

構造函數裏面有倆個屬性__proto__和prototype屬性,原型屬性prototype本質上該屬性就是對象(Object的實例對象)。__proto__指向Function。

--------------------------------------------------------------------------------------

原型

技術分享

原型裏面有構造器construction和__proto__,構造器指向原型所屬的構造函數,__proto__指向Object。Object的__proto__指向null。

總結:

1、所有的函數都有Prototype屬性,

2、prototype屬性本質上也是對象(實際上就是Object的實例對象--{} 或者new Object)--原型對象中也有一個__proto__屬性,並且指向Object.prototype,但是Object.prototype中沒有該屬性,指向null。

3、原型對象默認會有一個構造器construction屬性,該屬性指向原型所屬的構造函數,

4、所有的函數都是Function的實例

5、Function也是自己的實例

6、所有的實例對象中,都有一個__proto__ 屬性,該屬性指向創建該實例對象的構造函數的原型。

7、__proto__屬性不可以在編程中使用,該屬性不是標準,只能在瀏覽器自己內部使用。

8、雖然所有的函數中都有prototype和__proto__倆個屬性,但是這倆個屬性不是在所有的情況下都有用,

prototype只有在實例化之後才有價值 new Foo()

__proto_只有作為普通函數才有價值, foo.call()

9、實例對象中也有__proto__,主要和函數中的__proto__ 做好區分,實例對象指的是構造函數的原型,函數也是指向構造函數的原型,但是特指Function的原型。

實例對象、構造函數、原型之間的關系