Web分享 2020-06-08
private
、protected
和 public
访问修饰符声明成员访问限制,并在编译期进行检查。显然 ECMAScript 受到启发,在 ES2015 中引入了新的类定义语法,并开始思考成员访问限制的问题,提出了基于 Symbol 和闭包私有成员定义方案,当然这个方案使用起来并不太能被接受。又经过长达 4 年思考、设计和讨论,最终在 ES2019 中发布了使用 #
号来定义私有成员的规范。Chrome 74<sup>+</sup> 和 Node 12<sup>+</sup> 已经实现了该私有成员定义的规范。
JavaScript 和 ECMAScript 有什么关系?
ECMAScript 由 ECMA-262 标准定义,是一个语言规范(Specification);JavaScript 是该规范的一个实现。拿上面的问题去搜索引擎上搜索一下,可以查阅到更详尽的答案。
先来看一个示例:
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 等浏览览器的开发者工具控制台中运行都没有问题。