深入淺出javascript對象原型

深入淺出javascript對象原型

圖文並茂的幫助你更好的理解JavaScript原型.熟記並理解以下規則,保你深入理解對象原型,保你面試無憂.

1. 任何對象都擁有__proto__(隱式原型)屬性,一般指向他們的構造函數的原型(prototype).

深入淺出javascript對象原型

2. 原型鏈的頂端是Object.prototype,其__proto__為null

深入淺出javascript對象原型

3. 所有函數都擁有prototype(顯式原型)屬性

深入淺出javascript對象原型

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

深入淺出javascript對象原型

類似的十分容易就能理解

深入淺出javascript對象原型

5. 更奇葩的來了,ObjectFunction Array 本身也都是一個函數,由於是最常用的,所以JavaScript幫我們實現了

深入淺出javascript對象原型

6. 原型對象中又擁有constructor屬性,該屬性指向函數本身,這個好理解

深入淺出javascript對象原型

7. 先普及一波原型鏈概念

如果想要找到一個對象的屬性,首先會先在自身查找,如果沒有,就會通過__proto__屬性一層層的向上查找,直到原型鏈的頂端Object.prototype(__proto__:null)這種通過某種紐帶(__proto__)將對象之間形成一種繼承關係這種關係呈現出一種鏈條的形狀 將這種鏈條稱之為原型鏈

8. 根據第6條可以推論得:

深入淺出javascript對象原型

9. Function.prototype.__proto__=== Object.prototype

Function是一個特殊的例子他創造了所有的函數,但他自身也是一個函數,他自己同時也創造了自己此處見第 5條(感謝網友指出的錯誤)

下面配合幾張原型圖,幫助大家更好的理解.

構造函數創建對象字面量原型圖

深入淺出javascript對象原型

當我們創建一個函數時原型如下:

深入淺出javascript對象原型

構造函數創建對象字面量原型圖

完整對象字面量原型圖:

深入淺出javascript對象原型

深入淺出javascript對象原型

完整對象字面量原型圖

數組原型鏈

深入淺出javascript對象原型

深入淺出javascript對象原型

數組原型鏈

基本包裝類型原型鏈

深入淺出javascript對象原型

深入淺出javascript對象原型

基本包裝類型

其實所有的原型鏈規則都是根據上面的規則來的,只要能記住並理解,那麼你也就理解原型了

深入淺出javascript對象原型


分享到:


相關文章: