主要区别
- 访问方式:
- 静态成员:通过类名直接访问,不需要创建类的实例。例如,对于类
MyClass
,如果有静态成员staticMember
,访问方式是MyClass.staticMember
。
- 实例成员:需要先创建类的实例,然后通过实例来访问。例如,先
const myInstance = new MyClass();
,再通过myInstance.instanceMember
访问实例成员。
- 内存分配:
- 静态成员:在类加载时就分配内存,无论创建多少个类的实例,静态成员只有一份内存空间。
- 实例成员:每创建一个类的实例,都会为实例成员分配一份新的内存空间。每个实例的实例成员相互独立。
使用场景举例
- 工具方法:
假设我们有一个数学工具类
MathUtils
,其中有一个方法用于计算两个数的和。这个方法不依赖于任何实例的状态,就可以定义为静态方法。
class MathUtils {
static add(a: number, b: number): number {
return a + b;
}
}
// 使用时无需创建实例
const result = MathUtils.add(2, 3);
- 共享状态:
比如一个游戏中的计分板类
Scoreboard
,需要记录全局的总分数。这个总分数对于所有玩家实例来说是共享的,就可以定义为静态成员。
class Scoreboard {
static totalScore: number = 0;
static updateScore(score: number) {
Scoreboard.totalScore += score;
}
}
// 玩家1得分
Scoreboard.updateScore(10);
// 玩家2得分
Scoreboard.updateScore(20);
console.log(Scoreboard.totalScore); // 输出30