JavaScript 和 TypeScript 的封装性 —— 私有成员
JavaScript 使用了基于原型模式的 OOP 实现,一直以来,其封装性都不太友好。为此,TypeScript 在对 JavaScript 类型进行增强的同时,特别关注了“类”定义。TS 的类定义起来更接近于 Java 和 C# 的语法,还允许使用
private
、protected
和 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 等浏览览器的开发者工具控制台中运行都没有问题。
相关推荐
小飞侠V 2020-09-25
changcongying 2020-09-17
淼寒儿 2020-09-13
lyjava 2020-09-11
nmgxzm00 2020-11-10
ifconfig 2020-10-14
hhanbj 2020-11-17
zfszhangyuan 2020-11-16
古叶峰 2020-11-16
一个智障 2020-11-15
jipengx 2020-11-12
81427005 2020-11-11
xixixi 2020-11-11
游走的豚鼠君 2020-11-10
苗疆三刀的随手记 2020-11-10
Web卓不凡 2020-11-03
小飞侠V 2020-11-02
帕尼尼 2020-10-30