第六章 面向對象的程序設計

本文主要是根據《JavaScript高級程序設計》摘抄學習而成。
6.1 理解對象
兩種屬性:數據屬性和訪問器屬性。特性:描述屬性的各類特徵,是爲了實現JavaScript引擎用的,不能直接訪問。函數

  • 數據屬性,有4個特性:學習

  • [[Configurable]]:表示可否經過 delete 刪除屬性從而從新定義屬性,可否修改屬性的特性,可否把屬性修改成訪問器屬性。this

  • [[Enumerable]]:表示可否經過 for-in 循環返回屬性。prototype

  • [[Writeable]]:表示可否修改屬性的值。設計

  • [[Value]]:包含這個屬性的數據值。指針

  • 訪問器屬性,有4個特性: [[Configurable]]:表示可否經過 delete 刪除屬性從而從新定義屬性,可否修改屬性的特性,可否把屬性修改成數據屬性。對象

  • [[Enumerable]]:表示可否經過 for-in 循環返回屬性。繼承

  • [[Get]]:在讀取屬性時調用的函數。ip

  • [[Set]]:在寫入屬性時調用的函數。原型鏈

定義及讀取特性:Object.defineProperty()、Object.defineProperties()、Object.getOwnPropertyDescriptor()
6.2 建立對象

  • 工廠模式:雖然解決了建立多個類似對象的問題,但卻沒有解決對象識別的問題。
  • 構造函數模式(構造函數應該以大寫字母開頭)
    構造函數模式這種方法會經歷4個步驟:
    1. 建立一個新對象
    2. 將構造函數的做用域賦給新對象(this指向這個新對象)
    3. 執行構造函數中的代碼(爲新對象添加屬性或方法)
    4. 返回新對象
      構造函數的問題:每一個方法都要在每一個實例上從新建立一遍。
  • 原型模式:每一個函數都有一個 prototype 屬性,這個屬性是一個指針,指向一個對象(函數的原型對象),這個對象包含能夠由該類型的全部實例共享的屬性和方法。
    • 理解原型對象:
    • 只要建立一個新函數,就會根據一組特定的規則爲該函數建立一個 prototype 屬性,指向原型對象
    • 默認全部原型對象都會得到一個 constructor 屬性,指向 prototype 屬性所在函數
    • 調用構造函數建立新實例後,實例將有一個 proto 屬性,指向構造函數的原型對象,指針叫[[Prototype]],默認原型指向Object
    • 實例與構造函數沒有直接關係
    • 讀取屬性:搜索先從對象實例自己開始,若是沒找到,搜索原型對象
    • 使用 isPrototype() 來檢測構造函數和實例之間是否有關係
    • 使用 hasOwnProperty() 來檢測屬性存在於實例中仍是原型中

6.3 繼承

  1. 最經常使用的繼承:組合繼承。融合了原型鏈和構造函數的優勢。
  2. 原型式繼承:能夠在沒必要須先定義構造函數的狀況下實現繼承,其本質是執行對給定對象的淺複製。而複製獲得的副本還能夠獲得進一步改造。
  3. 寄生式繼承
  4. 寄生組合式繼承
相關文章
相關標籤/搜索