JavaScript 和 TypeScript 的封装性 —— 私有成员

JavaScript 使用了基于原型模式的 OOP 实现,一直以来,其封装性都不太友好。为此,TypeScript 在对 JavaScript 类型进行增强的同时,特别关注了“类”定义。TS 的类定义起来更接近于 Java 和 C# 的语法,还允许使用 privateprotected 和 public 访问修饰符声明成员访问限制,并在编译期进行检查。

显然 ECMAScript 受到启发,在 ES2015 中引入了新的类定义语法,并开始思考成员访问限制的问题,提出了基于 Symbol 和闭包私有成员定义方案,当然这个方案使用起来并不太能被接受。又经过长达 4 年思考、设计和讨论,最终在 ES2019 中发布了使用 # 号来定义私有成员的规范。Chrome 74<sup>+</sup> 和 Node 12<sup>+</sup> 已经实现了该私有成员定义的规范。

JavaScript 和 ECMAScript 有什么关系?

ECMAScript 由 ECMA-262 标准定义,是一个语言规范(Specification);JavaScript 是该规范的一个实现。拿上面的问题去搜索引擎上搜索一下,可以查阅到更详尽的答案。

1. ES 规范中的私有成员定义

1.1. 正确示例

先来看一个示例:

class Test {
    static #greeting = "Hello";
    #name = "James";

    test() {
        console.log(`${Test.#greeting} ${this.#name}`);
    }
}

// 用一个 IIFE 来代替定义并执行 main()
(() => {
    const t = new Test();
    t.test();               // OUTPUT: Hello James
})();

这个示例在 Chrome 74<sup>+</sup> 和最新版的 Edge 等浏览览器的开发者工具控制台中运行都没有问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值