2024-05-22|閱讀時間 ‧ 約 27 分鐘

※ 物件導向程式設計-OPP(五)

    ※ class類別

    什麼是class?

    class是創造consturctor function時的語法糖,本質上與使用function創造物件(object)的行為沒有不同。

    class的作用:

    用來定義、描述要創造的物件(object)具有那些屬性、行為的一個表達式。就像是「車子的設計圖」,描述了車子有什麼樣的零件(屬性)和功能(方法)。

    class ShibaInu {
    constructor(name, color) {
    this.name = name,
    this.color = color
    }
    playWith(someone) {
    console.log(`${this.color}${this.name}${someone.name}一起玩`)
    }
    }

    class Cat {
    constructor(name) {
    this.name = name
    }
    }

    const dog = new ShibaInu("小小柴", "棕色")
    const catty = new Cat("凱蒂")

    dog.playWith(catty)//棕色的小小柴跟 凱蒂一起玩

    static 關鍵字

    靜態屬性與方法,也被稱為靜態成員(Static Members),可以在不需要經由建構物件的過程下直接通過類別(Class)來調用或訪問。而static是一個用來定義靜態方法或屬性的關鍵字。

    • 靜態方法:在方法前面加上 static 關鍵字,這個方法就可以直接通過類別(Class)來呼叫,而不需要經由建構物件的過程。
    • 靜態屬性:使用 static 關鍵字定義的屬性,可以直接通過類別訪問,而不需要經由建構物件的過程。

    static 範例(一):

    class MathUtils {
    // 靜態方法
    static add(a, b) {
    return a + b
    }

    // 靜態屬性
    static PI = 3.14159
    }

    // 直接通過類別名稱調用靜態方法
    console.log(MathUtils.add(2, 3)) // 輸出: 5

    // 直接通過類別名稱訪問靜態屬性
    console.log(MathUtils.PI) // 輸出: 3.14159

    static 範例(二):

    (function main() {
    // 蘋果的建構函數
    class Apple {
    constructor(quantity) {
    this.quantity = quantity
    this.price = 60 // 蘋果的價格固定為60元
    }
    getTotalPrice() {
    return this.quantity * this.price
    }
    } 


    // 雞蛋的建構函數
    class Egg {
    constructor(quantity, isOnSale) {
    this.quantity = quantity
    this.price = isOnSale ? 3 : 5 // 根據是否特價來設定價格
    }

    getTotalPrice() {
    return this.quantity * this.price
    }
    }

     

    // 定義 LittleJohn 類別
    class LittleJohn {
    constructor(name, wallet) {
    this.name = name
    this.wallet = wallet
    }
    buy(item) {
    const cost = item.getTotalPrice()
    if (this.wallet >= cost) {
    this.wallet -= cost;
    console.log(`${this.name} 購買了 ${item.quantity}${item.constructor.name},花費了 ${cost} 元,剩餘 ${this.wallet}`)
    } else {
    console.log(`${this.name} 的錢包不足,無法購買 ${item.quantity}${item.constructor.name}`)
    }
    }
    }

    //創建小強物件並進行購買
    const littleJohn = new LittleJohn("小強", 300)
    // 購買兩個蘋果
    const apples = new Apple(2)
    littleJohn.buy(apples)
    // 如果雞蛋特價,購買一打雞蛋
    const isEggOnSale = true // 假設雞蛋特價
    if (isEggOnSale) {
    const eggs = new Egg(12, isEggOnSale) // 一打雞蛋
    littleJohn.buy(eggs)
    }
    //小強的剩餘錢包金額
    console.log(`小強剩餘的錢包金額: ${littleJohn.wallet}`)

    })()
    //輸出​小強 購買了 2 個 Apple,花費了 120 元,剩餘 180 元
    // 小強 購買了 12 個 Egg,花費了 36 元,剩餘 144 元
    //小強剩餘的錢包金額: 144元
    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.