記住這兩點,徹底終結原型鏈吧

一燈發表於2019-05-06

文章極短,沒有圖!

1.概念

__proto__

  • 物件特有
  • 指向上層(建立自己的那個建構函式)的pototype
  • 因此物件可以從 prototype 中繼承屬性和方法

prototype

  • 函式特有
  • 用於儲存要共享的屬性和方法

constructor

  • 函式特有,定義在prototype裡面
  • 通過new建立例項時,該例項便繼承了prototype的屬性和方法

2. 既是函式也是物件

Object:既是物件,也是建構函式

  • 作為物件:Object.__proto__ = Function.prototype

  • 作為函式:Object.prototype是原型鏈的頂端,Object.prototype.__proto__ = null

Function:既是物件,也是建構函式

  • 作為物件:Function.__proto__ = Function.prototype

  • 作為函式:Function.prototype用於共享,而Function.prototype__proto__繼承自Object.prototype

Array(Date...):既是物件,也是建構函式

  • 作為物件:Array.__proto__ = Function.prototype
  • 作為函式:Array.prototype用於共享,Array.prototype.__proto__繼承自Object.prototype

普通物件Person:既是物件,也是建構函式

  • 作為物件:Person.__proto__ = Function.prototype
  • 作為函式:Person.prototype用於共享,Person.prototype.__proto__繼承自Object.prototype

總結

  1. 原型鏈頂端是Object.prototype

  2. 建構函式建立的物件(Object、Function、Array、普通物件等)都是Function的例項,它們的__proto__均指向Function.prototype

  3. 除了Object,所有物件(或叫建構函式)的prototype,均繼承自Object.prototype

希望這篇簡短的文章可以幫助你徹底理解原型鏈,如果覺得文章有用,點贊鼓勵一下吧~

相關文章