初始原型鏈(三)

在我看來,原型鏈中有兩條特別難以理解的原型鏈,一個是 Function 的原型鏈,一個是 Object 的原形鏈。函數

 Function 的原型鏈prototype

首先,看下 Function 的原型鏈的圖示:3d

看起來就不是通常的鏈!對象

對, 對於 Function 來講最難理解的就是 Function.__proto__ == Function.prototype 了,也就是 Function的原型是 Function 。blog

 Function的原型是 Function 這是啥意思?繼承

首先,全部的函數都來自於 Function.prototype,舉個例子:原型鏈

看到沒?全部的函數的原型都是 Function.prototype字符串

Function是一個函數,既然是函數,那麼它的原型都是 Function.prototype。原型

小結io

Function 原型鏈具備如下關係:

1. Function也是一個函數,既然是函數,那麼它就應該被 Function 也就是其自身構造:Function.__proto__ == Function.prototype;

2. Function.prototype是一個對象,由 Object 構造,因此有: Function.prototype.__proto__  == Object.prototype;

3. 原型鏈的終點指向 null,Object.prototype.__proto__ == null;

也就是:

Function.__proto__.__proto__.__proto__ == null;

 

Object的原型鏈

Object的原型鏈也是難以理解的重點部分,直接上圖:

看這圖,成功組成了一個閉合迴路啊!Object 和 Function 造成了錯綜複雜的關係。讓咱們慢慢分析,請聽我娓娓道來。

首先 Object 是一個構造函數,爲何這麼說?舉個例子:

這樣,咱們經過 Object 構造了一個字符串對象,因此說 Object 是一個構造函數,上面說過,既然是函數,那麼它的原型都是 Function.prototype。

因此:Object.__proto__ == Function.prototype。

對於 Function.prototype,咱們都知道了,他是一個對象嘛, 因此 Function.prototype.proto == Object.prototype。

最後,原型鏈的定義中提到,原型鏈的終點指向 null 。因此, Object.prototype.__proto__ 應該指向  null。

 Object 和 Function 跟換孩子似的真的好麼?

小結

最後總結 Object 的原型鏈具備如下關係:

1.  Object 是一個構造函數,既然是函數,那麼它就應該被 Function構造:Function.__proto__ == Function.prototype;

2.  Function.prototype是一個對象,由 Object 構造,因此有: Function.prototype.__proto__  == Object.prototype;

3.  原型鏈的終點指向 null,Object.prototype.__proto__ == null;

也就是:

Object.__proto__.__proto__.__proto__ == null;

因此就有了這樣的圖:

後記

這是我對原型鏈知識的一點理解和見解,若有錯誤的理解或表述,歡迎你們指出,接下來我會結合原型介紹 js 的繼承。請你們多多支持!

 如需轉載,請指明出處,素質轉載,謝謝。

相關文章
相關標籤/搜索