iT邦幫忙

2025 iThome 鐵人賽

DAY 19
0
佛心分享-讓我升級的那些書

溫故而知新:Eloquent Javascript 閱讀筆記系列 第 19

Chapter 6 物件的秘密(getter, setter/ type of method)-day19

  • 分享至 

  • xImage
  •  

Getter & Setter

Getter 跟 Setter 可視為物件的特殊方法,以類似讀取屬性(property)的方式,隱藏背後呼叫方法
js 本身也有內建的 getter & setter
nameOfArray.length(getter), nameOfMap.size(getter)

如何分辨該方法是 Getter & Setter?

  • 該動作不像一般方法需要用 parentheses () 呼叫
  • 執行 Getter & Setter 的時候具有在取得或設定其值時隱藏在背後運行的程式碼

用一般的方法也可達到一樣效果,為何要用 Getter & Setter?

Getter & Setter 有其特殊優勢,諸如:

  • 增進抽象化
  • 因為會將實作細節的函式包裝隱藏,因此可增進封裝
  • 提供乾淨,可控(control)的方法去操作物件,像是對傳入的資料進行驗證,可避免 Object property 被修改為無效值

使用 Getter & Setter 的時機

  • 資料驗證 Data Validation
    對傳給 Object 的資料進行驗證,以避免無效的值傳到物件
  • 即時計算 On-the-fly Calaulations
    可省下預先計算佔用的資源及儲存預先計算值的空間
  • 讓物件的介面變得更簡潔與抽象 Creating a clean & abstract interface

以下為 getter & setter 示例
getter 用於計算該方形物件面積
setter 用於驗證傳入建立方形的數值為有效值

class RectTangle {
    constructor(width, height) {
        this.width = width;
        this.height = height;
    }
    set width(value) {
        if (value <= 0) {
            throw new Error("invalid value of width");
        }
        this._width = value;
    }
    set height(value) {
        if (value <= 0) {
            throw new Error("invalid value of height");
        }
        this._height = value;
    }
    get area() {
        return this._width * this._height;
    }
}

try {
    let invalidRectangle = new RectTangle(10, -12);
} catch (error) {
    console.log(error.message);
}

staic method / instance method

staic method

  • 呼叫該靜態方法時從 class 直接呼叫
  • 像是 Math.floor(), Math.random(), Array.from() 都是靜態方法
  • 靜態方法通常為 utility function,其傳入參數或為物件實體,如Object.keys(nameOfObjectInstance), Object.entries(nameOfObjectInstance)

instance method

  • 呼叫實體方法時,由物件實體呼叫
  • 像是 forEach(), map()
  • 另外 innerWidth, onload 實際上省略掉 window object,所以它們是 instance method

兩者皆不是的方法

  • global function既非 staic method 也不是 instance method
  • 可以在任何地方呼叫而不需要在類別或物件實體上呼叫
  • 像是 isNaN, isFinite, console.log()

上一篇
Chapter 6 物件的秘密(matrix exercise)-day18
系列文
溫故而知新:Eloquent Javascript 閱讀筆記19
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言