《TypeScript实战指南》—3.2.4 存取器

举报
华章计算机 发表于 2019/06/16 13:21:26 2019/06/16
【摘要】 本节书摘来自华章计算机《TypeScript实战指南》一书中的第3章,第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文件时是有帮助的,因为利用这个属性的用户会看到不允许改变它的值。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。