TypeScript中的關鍵字static
ES6中的靜態成員在TypeScript也存在,類的靜態成員可以使用類名.
變量名的形式訪問,不需要創建類的實例。
例如,在ts中
class Circle {
static pi: number = 3.14;
}
上面的Circle
包含靜態屬性pi
,可以使用Circle.pi
訪問,ts會將上面的代碼編譯成如下js文件
var Circle = /** @class */ (function () {
function Circle() {
}
Circle.pi = 3.14;
return Circle;
}());
因此可以將上面的ts代碼理解為,在Circle
對象上增加一個屬性pi
靜態與非靜態同時存在
class Circle {
pi: number = 12;// 普通變量
static pi: number = 3.14;// 靜態變量
// 普通方法
calculateArea(radius:number):number {
// 此處this是指`Circle`的實例化對象
return this.pi * Circle.pi * radius;
}
// 靜態方法
static calculateArea(radius:number) {
// 此處this並不是實例化后的this,而是將`Circle`本身視為一個對象,因此`this.pi`的結果是3.14
return this.pi * radius * radius;
}
}
console.log(Circle.pi); // 返回 3.14
console.log(Circle.calculateArea(5)); // 返回 78.5
const circle = new Circle();
console.log(circle.pi); // 返回 12
console.log(circle.calculateArea(5));// 返回 300 (12 * 5 * 5)
上面的例子並不會報錯,ts雖然允許這種寫法,但是並不推薦,容易產生視覺上的混淆。