JavaScript 使用了基於原型模式的 OOP 實現,一直以來,其封裝性都不太友好。爲此,TypeScript 在對 JavaScript 類型進行加強的同時,特別關注了「類」定義。TS 的類定義起來更接近於 Java 和 C# 的語法,還容許使用 private
、protected
和 public
訪問修飾符聲明成員訪問限制,並在編譯期進行檢查。閉包
顯然 ECMAScript 受到啓發,在 ES2015 中引入了新的類定義語法,並開始思考成員訪問限制的問題,提出了基於 Symbol 和閉包私有成員定義方案,固然這個方案使用起來並不太能被接受。又通過長達 4 年思考、設計和討論,最終在 ES2019 中發佈了使用 #
號來定義私有成員的規範。Chrome 74<sup>+</sup> 和 Node 12<sup>+</sup> 已經實現了該私有成員定義的規範。ide
JavaScript 和 ECMAScript 有什麼關係?工具
ECMAScript 由 ECMA-262 標準定義,是一個語言規範(Specification);JavaScript 是該規範的一個實現。拿上面的問題去搜索引擎上搜索一下,能夠查閱到更詳盡的答案。this
先來看一個示例:搜索引擎
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 等瀏覽覽器的開發者工具控制檯中運行都沒有問題。設計