面试题答案
一键面试以下是用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
。
- 实例成员:通过实例对象来访问,如