es6關於class在js和ts中的的一些理解

baiyujie02420發表於2024-03-19

關於class在 js 和 ts 中的的一些理解

js中:

class Human {
  // 加上static 該屬性只能透過Human類去獲取;
  // 不加static 該屬性可以透過例項去獲取 其實等同於寫在consturctor裡面。只不過是寫死的,不能自定義
  static hobby = "吃飯";
    
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  // 該屬性掛載在建構函式的原型上,以後所有的例項物件都可以訪問,是公共的。
  sayHi() {
    console.log(`你好,我是${this.name},今年${this.age}歲。`);
  }
}

關於this的指向:

  • constructor函式內的this指向例項物件

  • 類的方法的this取決於方法是不是箭頭函式

    • 如果是箭頭函式,this是初始化時就被固定了的,永遠指向例項物件
    • 如果是普通函式,那麼this是可以被改變的,例如把這個方法賦予給一個變數,呼叫這個變數,那麼this可能是undefined

TS中:

class Monkey {
  // 宣告變數
  public name: string
  public age: number
    
  constructor(name: string, age: number) {
    this.name = name
    this.age = age
  }
  public introduce(): string {
    return `猴子 is ${this.name} and I'm ${this.age} years old.`
  }
}

關於關鍵詞:

  • public表示可以被例項物件訪問到
  • private表示只能在當前類作用域中被訪問
  • protected表示只能在當前類作用域中被訪問和繼承類中被訪問
  • static表示靜態屬性,只能被類本身訪問
  • readonly表示只可讀取,不可修改
  • 什麼關鍵字都不寫代表預設是public

相關文章