首先這是完整的原型鏈圖(圖片來自百度,在這裏是引用他的圖片, 不曾謀面可是筆者向其表達敬意);函數
這一整張圖,咱們只須要構造一個函數;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 也必定會有
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
因而 咱們整個的原型鏈就完成了
用圖表示就是