《TypeScript实战指南》—3.2.4 存取器
3.2.4 存取器
TypeScript支持通过getters/setters来截取对对象成员的访问,这可以有效地控制如何访问对象成员。
下面的示例把一个简单的类改写成使用get和set方法。首先,我们从一个没有使用存取器的例子开始:
class Employee {
fullName: string;
}
let employee = new Employee();
employee.fullName = "Bob Smith";
if (employee.fullName) {
console.log(employee.fullName);
}
我们可以随意地设置fullName,这是非常方便的,但是这也可能会带来麻烦。
下面这段代码里,我们先检查用户密码是否正确,然后再允许其修改员工信息。我们把对fullName的直接访问改成了可以检查密码的set方法。我们也加了一个get方法,让上面的例子仍然可以工作:
let passcode = "secret passcode";
class Employee {
private _fullName: string;
get fullName(): string {
return this._fullName;
}
set fullName(newName: string) {
if (passcode && passcode == "secret passcode") {
this._fullName = newName;
}
else {
console.log("Error: Unauthorized update of employee!");
}
}
}
let employee = new Employee();
employee.fullName = "Bob Smith";
if (employee.fullName) {
alert(employee.fullName);
}
我们可以修改一下密码,来验证存取器是否工作。当密码不对时,会提示我们没有权限去修改员工。
对于存取器需要注意以下几点:
需要将编译器设置为输出ECMAScript 5或更高,不支持降级到ECMAScript 3。
只带有get不带有set的存取器自动被推断为readonly。这在从代码生成.d.ts文件时是有帮助的,因为利用这个属性的用户会看到不允许改变它的值。
- 点赞
- 收藏
- 关注作者
评论(0)