MST

星途 面试题库

面试题:TypeScript 中静态成员与实例成员的区别及static关键字应用

请简述 TypeScript 中静态成员和实例成员的主要区别,并举例说明在何种场景下会使用 static 关键字来定义静态成员。
17.7万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

主要区别

  1. 访问方式
    • 静态成员:通过类名直接访问,不需要创建类的实例。例如,对于类MyClass,如果有静态成员staticMember,访问方式是MyClass.staticMember
    • 实例成员:需要先创建类的实例,然后通过实例来访问。例如,先const myInstance = new MyClass();,再通过myInstance.instanceMember访问实例成员。
  2. 内存分配
    • 静态成员:在类加载时就分配内存,无论创建多少个类的实例,静态成员只有一份内存空间。
    • 实例成员:每创建一个类的实例,都会为实例成员分配一份新的内存空间。每个实例的实例成员相互独立。

使用场景举例

  1. 工具方法: 假设我们有一个数学工具类MathUtils,其中有一个方法用于计算两个数的和。这个方法不依赖于任何实例的状态,就可以定义为静态方法。
class MathUtils {
    static add(a: number, b: number): number {
        return a + b;
    }
}
// 使用时无需创建实例
const result = MathUtils.add(2, 3); 
  1. 共享状态: 比如一个游戏中的计分板类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