面试题答案
一键面试架构设计思路
- 公有成员(public):适用于需要在类的外部访问和调用的方法和属性。例如,一些通用的工具方法,在项目的多个地方可能都会用到,就可以设置为
public
。 - 私有成员(private):用于那些不希望在类的外部直接访问的属性和方法。在复杂架构中,可能存在一些只与类内部逻辑相关的数据和操作,比如某些中间计算过程的变量,设置为
private
可以防止外部误操作,保证数据安全性。 - 受保护成员(protected):在多层继承场景下非常有用。当一个类的某些属性或方法希望能被其子类访问,但不希望在类外部直接访问时,可设置为
protected
。例如,父类中有一些基础的业务逻辑处理方法,子类可能需要基于这些方法进行扩展,将这些方法设为protected
就可以满足需求。
代码示例
// 基类
class BaseComponent {
// 公有属性
public commonData: string;
// 受保护属性
protected internalData: number;
// 私有属性
private secretData: boolean;
constructor(common: string, internal: number, secret: boolean) {
this.commonData = common;
this.internalData = internal;
this.secretData = secret;
}
// 公有方法
public publicMethod(): void {
console.log('This is a public method, data:', this.commonData);
}
// 受保护方法
protected protectedMethod(): void {
console.log('This is a protected method, internal data:', this.internalData);
}
// 私有方法
private privateMethod(): void {
console.log('This is a private method, secret data:', this.secretData);
}
// 公有方法调用私有方法
public callPrivateMethod(): void {
this.privateMethod();
}
}
// 子类继承自BaseComponent
class SubComponent extends BaseComponent {
constructor(common: string, internal: number, secret: boolean) {
super(common, internal, secret);
}
// 子类重写父类的受保护方法
protected protectedMethod(): void {
super.protectedMethod();
console.log('Extended protected method in SubComponent');
}
// 子类调用父类的受保护方法
public callProtectedMethod(): void {
this.protectedMethod();
}
}
// 创建BaseComponent实例
const base = new BaseComponent('common value', 10, true);
base.publicMethod();
// base.protectedMethod(); // 报错,无法在类外部访问protected方法
// base.privateMethod(); // 报错,无法在类外部访问private方法
base.callPrivateMethod();
// 创建SubComponent实例
const sub = new SubComponent('sub common value', 20, false);
sub.publicMethod();
sub.callProtectedMethod();
// sub.privateMethod(); // 报错,无法在类外部访问private方法
通过上述代码示例可以看到,利用 TypeScript 的访问修饰符,可以清晰地控制类成员的访问权限,从而在复杂的前端项目架构中优化代码结构,避免潜在的代码漏洞和逻辑混乱,保证数据的安全性和业务逻辑的正确性。