TypeScript - 訪問修飾符



訪問修飾符的概念用於在 TypeScript 中實現封裝或資料隱藏。訪問修飾符定義了在定義類之外類成員的可見性。類成員包括屬性和函式。訪問修飾符也稱為訪問說明符。

TypeScript 支援三種類型的訪問修飾符——publicprivateprotected。這些修飾符是用於將類成員宣告為公共、私有或受保護的關鍵字。

公共類成員可以在程式碼的任何地方訪問。私有成員只能在定義它的類中訪問。受保護的成員可以在類和派生類中訪問。

讓我們詳細瞭解上面討論的三種訪問修飾符。

公共訪問修飾符

TypeScript 中的公共訪問修飾符定義了一個公共類成員。預設情況下,類的成員是公共的。因此,使用 public 關鍵字宣告成員為公共成員是可選的。公共成員可以在定義成員的類內和類外任何地方訪問。

示例

在下面的示例中,我們建立了一個名為 Person 的類。Person 類有兩個成員,一個是公共屬性 name,另一個是公共方法 greet()。由於這些成員被宣告為公共的,因此可以在程式的任何地方訪問它們。

我們還建立了 Person 類的例項 person。我們訪問 person 物件的 name 屬性併為其賦值。最後,我們呼叫 greet 函式以顯示帶有新名稱的問候語。

class Person {
   public name: string = "";
   public greet(): void {
      console.log(`Hello, my name is ${this.name}!`);
   }
} 
const person = new Person(); 
person.name = "John"; 
person.greet();

編譯後,它將生成以下 JavaScript 程式碼。

class Person {
    constructor() {
        this.name = "";
    }
    greet() {
        console.log(`Hello, my name is ${this.name}!`);
    }
}
const person = new Person();
person.name = "John";
person.greet();

以上示例程式碼的輸出如下:

Hello, my name is John!

私有訪問修飾符

私有訪問修飾符限制了類成員(屬性或方法)對其宣告所在的類的訪問。當您向屬性或方法新增 private 修飾符時,您只能在同一個類中訪問該屬性或方法。

TypeScript 中的私有訪問修飾符定義了一個私有類成員。私有成員可以在定義它們的類中訪問。

示例

在這個例子中,我們建立了一個 BankAccount 類,它有一個私有屬性 balance,只能在類內訪問和修改。此外,我們還有一個私有方法 calculateInterest(),它根據餘額計算利息。

您可以從輸出中觀察到,嘗試訪問私有成員將導致 TypeError。

class BankAccount {
   private balance: number; 
   constructor(initialBalance: number) {
      this.balance = initialBalance;
   } 
   private calculateInterest(): number {
      const interestRate = 0.05;
      return this.balance * interestRate;
   } 
}  
// Creating an instance of the BankAccount class
const account = new BankAccount(1000); 

// Attempting to access private members
console.log(account.balance); 
console.log(account.calculateInterest());

編譯後,它將生成以下 JavaScript 程式碼。

class BankAccount {
    constructor(initialBalance) {
        this.balance = initialBalance;
    }
    calculateInterest() {
        const interestRate = 0.05;
        return this.balance * interestRate;
    }
}
// Creating an instance of the BankAccount class
const account = new BankAccount(1000);
// Attempting to access private members
console.log(account.balance);
console.log(account.calculateInterest());

並將給出以下錯誤:

Property 'balance' is private and only accessible within class 'BankAccount'.
Property 'calculateInterest' is private and only accessible within class 'BankAccount'.

以上示例程式碼的輸出如下:

1000
50

受保護的訪問修飾符

受保護的訪問修飾符用於定義受保護的類成員(屬性或方法)。受保護的資料成員只能在定義它的類或任何擴充套件它的類中訪問。

示例

在這個例子中,我們建立了一個基類 Animal,它有一個受保護的屬性 name,可以在類及其派生類中訪問和修改。我們還有一個受保護的方法 makeSound(),它只是記錄一條訊息。

然後,我們建立一個派生類 Dog,它擴充套件了 Animal 類。Dog 類添加了一個公共方法 bark(),它利用從基類繼承的 name 屬性輸出一條 bark 訊息。

最後,我們建立了一個名為 dog 的 Dog 類例項,其名稱為“Buddy”,並呼叫 bark() 方法。

輸出將顯示狗的名字,然後是 bark 訊息。

class Animal {
   protected name: string; 
   constructor(name: string) {
      this.name = name;
   } 
   protected makeSound(): void {
      console.log("The animal makes a sound");
   }
} 
class Dog extends Animal {
   public bark(): void {
      console.log(`${this.name} barks!`);
   }
} 
// Creating an instance of the Dog class
const dog = new Dog("Buddy"); 
dog.bark();

編譯後,它將生成以下 JavaScript 程式碼。

class Animal {
    constructor(name) {
        this.name = name;
    }
    makeSound() {
        console.log("The animal makes a sound");
    }
}
class Dog extends Animal {
    bark() {
        console.log(`${this.name} barks!`);
    }
}
// Creating an instance of the Dog class
const dog = new Dog("Buddy");
dog.bark();

以上示例程式碼的輸出如下:

Buddy barks!
廣告