關於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