iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0

類別的存取權限

  • 在預設的情況下,類別中的屬性及方法都會是公開的,但在軟體開發中,完全公開有時是不符合開閉設計模式原則的,為避免遭外界有意或無意地修改,會導致類別內部的工作異常。
  • 許可權管理法的相關語法有:
    1. private: 我們可以用這個語法將屬性與方法定義為私有的,這樣在類別外及子類別中都不能進行存取。
    2. protected: 有些類別希望只有在類別外無法存取,而內類別及子類別可以存取,可使用protected進行宣告,使宣告的屬性及方法成為受保護的。

唯讀屬性

  • 唯讀屬性是指該屬性僅可設定值,但不能夠進行賦值,只可在屬性宣告時、建構函數內部可對屬性賦值。
  • TypeScript中,使用readonly來設定屬性為唯讀的。

存取器

  • 通常我們對屬性進行存取時,都是直接存值和設定值,而在某些情況下,需要使用設定特定邏輯來對屬性進行存值與設定值時,可使用存取器,例如:在圓形類別中,半徑是不可為負數的。
class Circle {
    readonly pi:numeber = 3.14
    private _radius:number
    constructor(radius:number){
        this.radius = radius
    }
    set radius(radius:number){
        console.log("呼叫了setter方法");
        if (radius >= 0){
            this._radius = radius;
        }
    }
    get radius(): number {
        console.log("呼叫了Getter方法")
        return this._radius;
    }
    area(): number{
        return this.pi * this.radius * this.radius;
    }
}
var c = new Circle(1)
console.log("面積:" + c.area());
  • 上面這段程式,raduius就像普通屬性,在實際上呼叫了對應的方法,在方法裡對私有的屬性進行操作。
  • 如此一來,即可將類別內部的私有屬性與外部公開屬性進行隔離。
  • 只有符合要求的資料才能被賦值至私有屬性,在獲取屬性的值時也可以有邏輯保證一定傳回合法的值。

靜態屬性

目前前面談到的都是實例屬性,只有當別實例話出物件時,才可被建立並包裝至物件內部。

  • 當某些屬性是被所有物件共用的時,可以將其宣告成唯讀的靜態屬性。
  • TypeScript中使用static來宣告靜態屬性,靜態屬性會被直接定義在「類別」上,而非類別的實例上,存取時,同樣直接透過類別名稱來存取。

抽象類別

  • 類別的作用是使物件實例化,但並非所有類別都需要實例化出物件。
  • 當類別本身無實例化的意義時,就可以使用TypeScript中的abstract來定義抽象類別。
  • 抽象類別不可直接實例化,只可透過繼承自抽象類別的具體類別才能被實例化。

今天的內容到這邊為止,明天會介紹TypeScript中介面的應用!


上一篇
Day 11
下一篇
Day 13
系列文
從零開始學習TypeScript、Vue.js !!13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言