推荐答案
在 TypeScript 中,类的存取器(Accessors)是通过 get 和 set 关键字定义的,用于控制对类属性的访问和修改。get 用于定义获取属性值的方法,而 set 用于定义设置属性值的方法。通过存取器,可以在访问或修改属性时执行额外的逻辑,例如验证、计算或触发事件。
本题详细解读
1. get 存取器
get 存取器用于定义一个获取属性值的方法。当访问该属性时,get 方法会被自动调用。get 方法通常用于返回私有属性的值,或者在返回之前执行一些计算或逻辑。
// www.javascriptcn.com code example
class Person {
private _age: number;
constructor(age: number) {
this._age = age;
}
get age(): number {
console.log("Getting age");
return this._age;
}
}
const person = new Person(30);
console.log(person.age); // 输出: Getting age 30在上面的例子中,age 是一个 get 存取器,当访问 person.age 时,get 方法会被调用,并返回 _age 的值。
2. set 存取器
set 存取器用于定义一个设置属性值的方法。当给该属性赋值时,set 方法会被自动调用。set 方法通常用于在设置属性值之前执行一些验证或逻辑。
// www.javascriptcn.com code example
class Person {
private _age: number;
constructor(age: number) {
this._age = age;
}
get age(): number {
return this._age;
}
set age(newAge: number) {
if (newAge < 0) {
throw new Error("Age cannot be negative");
}
this._age = newAge;
}
}
const person = new Person(30);
person.age = 25; // 正常设置
console.log(person.age); // 输出: 25
person.age = -5; // 抛出错误: Age cannot be negative在上面的例子中,age 是一个 set 存取器,当给 person.age 赋值时,set 方法会被调用,并在设置 _age 之前进行验证。
3. 存取器的使用场景
- 数据验证:在设置属性值时进行验证,确保数据的有效性。
- 计算属性:在获取属性值时进行计算,返回计算结果。
- 触发事件:在属性值发生变化时触发相关事件。
- 封装私有属性:通过存取器访问和修改私有属性,避免直接暴露私有属性。
通过使用 get 和 set 存取器,可以更好地控制类属性的访问和修改,增强代码的可维护性和安全性。