MST

星途 面试题库

面试题:TypeScript中实例成员与静态成员区别的代码实现

请用TypeScript编写一个类,包含实例成员和静态成员,并通过实例和类分别访问它们,同时阐述实例成员和静态成员在内存分配与访问方式上的区别。
38.8万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

以下是用TypeScript编写的包含实例成员和静态成员的类,并展示通过实例和类分别访问它们的代码:

class MyClass {
    // 实例成员
    instanceProperty: string;
    constructor(value: string) {
        this.instanceProperty = value;
    }
    instanceMethod() {
        return `实例方法访问实例属性: ${this.instanceProperty}`;
    }
    // 静态成员
    static staticProperty: number = 42;
    static staticMethod() {
        return `静态方法访问静态属性: ${MyClass.staticProperty}`;
    }
}
// 通过实例访问实例成员
const myInstance = new MyClass('Hello');
console.log(myInstance.instanceMethod()); 
// 通过类访问静态成员
console.log(MyClass.staticMethod()); 

实例成员和静态成员在内存分配与访问方式上的区别:

  • 内存分配
    • 实例成员:每个实例对象都有自己独立的实例成员副本。当创建一个新的实例时,会为该实例的实例成员分配内存空间。比如上述代码中,每次 new MyClass 都会为 instanceProperty 分配新的内存。
    • 静态成员:静态成员只有一份,存储在类本身的内存区域,而不是每个实例对象中。无论创建多少个实例,静态成员的内存空间只有一份,比如 MyClass.staticProperty
  • 访问方式
    • 实例成员:通过实例对象来访问,如 myInstance.instanceMethod()。实例方法中可以访问实例属性,因为实例方法的 this 指向当前实例对象。
    • 静态成员:通过类名来访问,如 MyClass.staticMethod()。静态方法中不能直接访问实例成员,因为静态方法不依赖于任何实例,没有指向实例对象的 this