Javascript的Function, Class, 繼承, 原型鏈

Function

JavaScript的函式就是物件

  1. 每個function都有prototype屬性。
  2. 透過new 的關鍵字,就可以生成一個物件。
  3. 共有方法是透過物件的__proto__屬性指向到函式的方法。
  4. 可以透過Object.getPrototypeOf( )確認物件的原型為何。
  5. 建議不要輕易地去改動prototype,可能會影響到所有物件。

Class

  1. 透過new關鍵字,可以生成一個物件。
  2. static 是靜態方法關鍵字,可以不用透過new的動作產生物件。
  3. getter/setter在物件導向主要是用來提供介面讓外界可以修改或讀取class 內部私有變數值。
  4. getter/setter 在JavaScript尚有一些遺憾之處,因為在ES6還沒有private variable,所以可以直接 this.license =“xxx”給值,在 ES2019 才會有private variable解決這問題。(變數前面加上#)
  5. 建議直接在get function 利用 return value會更為安全些。
  6. 透過new關鍵字,可以生成一個物件
  7. 關鍵字:class、static、get、set、return

繼承

  1. ES6的繼承作法都是透過extends 關鍵字,繼承某類別。
  2. super( )可以訪問父類別的constuctor。
  3. super( )只能在constructor函式裏頭呼叫。
  4. 如果類別有繼承別的類別,要透過this宣告類別的屬性,得先在constuctor函式裏頭宣告super( ),並且在this之前宣告。
  5. constuctor一般稱為建構函式,可以替物件宣告內部變數。

原型鏈

image

  1. 子類別的this會指向父類別。
  2. Object.getPrototypeOf()可以確認兩個類別是否存在繼承關係。
  3. Object.hasOwnProperty()不會檢查到父類別的屬性。
  4. 所有class的原型是Object。
  5. 所有的繼承骨子裡也都還是透過prototype,只是在寫法上ES6提供更好的語法。