JavaScript 和 TypeScript 的封装性 —— 私有成员
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 等浏览览器的开发者工具控制台中运行都没有问题。
以上是关于JavaScript 和 TypeScript 的封装性 —— 私有成员的主要内容,如果未能解决你的问题,请参考以下文章