原型、原型鏈

首先這是完整的原型鏈圖(圖片來自百度,在這裏是引用他的圖片, 不曾謀面可是筆者向其表達敬意);函數

這一整張圖,咱們只須要構造一個函數;prototype

圖中已經構造好了一個函數  Person();3d

咱們知道:對象

萬物皆對象:構造函數既是一個函數,同時也是個對象,原型同時也是一個對象
若是聲明瞭一個構造函數,系統內部就會幫咱們自動的生成一個與之對應的原型對象
.prototype : 用於訪問原型對象
.__proto__ : 是屬於對象的,指向實例化這個對象的構造函數對應的原型
.constructor : 屬於原型的 , 指向這個原型對應的 構造函數

 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------blog

構造的函數 Person(); 系統會自動幫咱們生成一個函數對象 Person.prototype原型 圖片

Person();能夠用語法 Person.prototype 來訪問它的原型原型鏈

而  Person.prototype.constructor 是用來指回他的構造函數 Person(); 的 原型

在控制檯上打出來: io

 

用圖表示是:百度

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

而 Person(); 實例化的對象 P1  能夠用 .__proto__ 來指回到他的原型

在控制檯中打出來:

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

整個過程用圖表示就是這個樣子的

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

原型同是也是一個對象,

那麼Person.prototype 它對應的原型是什麼?

是 Object.prototype 

 

Object.prototype是一個原型, 也是一個對象,

它對應的原型又是什麼?

是 null ;

null以後就沒有了;由於null自己就是」無「的意思。

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

構造函數 Person(); 同時也是一個實例化的對象

那誰是它的原型呢?

這裏咱們要知道一點: 函數是一個對象,這個對象是由 Function構造函數 實例化的

那麼  

 

因而用 Function.prototype 指回 它的構造函數 也會有

 

可是  注意一點 Function 它也是一個構造函數

那就是說 Function 也會把它自己實例化 : 

因而會有

 

 

整個的過程是

 

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

 同時Function.prototype原型 也是一個對象

它也是和 Person.prototype 原型同樣 看作一個對象

那麼這個對象也會指向 Object.prototype 原型

  而 Object.prototype 原型 同時也能夠看作是一個對象  最終會指向null

 

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

 既然Object.prototype是原型 也確定有它對應的構造函數

咱們用 .constructor 打印出來看看

 

那麼Object 也必定會有

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

因而  咱們整個的原型鏈就完成了

用圖表示就是

 

相關文章
相關標籤/搜索