原型、原型鏈

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

這一整張圖,我們只需要構造一個函數;

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

我們知道:

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

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

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

Person();可以用語法 Person.prototype 來訪問它的原型

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

在控制檯上打出來: 

 

用圖表示是:

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

而 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 也一定會有

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

於是  我們整個的原型鏈就完成了

用圖表示就是

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章