JavaScript 和 TypeScript 的封裝性 —— 私有成員

JavaScript 使用了基於原型模式的 OOP 實現,一直以來,其封裝性都不太友好。爲此,TypeScript 在對 JavaScript 類型進行加強的同時,特別關注了「類」定義。TS 的類定義起來更接近於 Java 和 C# 的語法,還容許使用 privateprotectedpublic 訪問修飾符聲明成員訪問限制,並在編譯期進行檢查。閉包

顯然 ECMAScript 受到啓發,在 ES2015 中引入了新的類定義語法,並開始思考成員訪問限制的問題,提出了基於 Symbol 和閉包私有成員定義方案,固然這個方案使用起來並不太能被接受。又通過長達 4 年思考、設計和討論,最終在 ES2019 中發佈了使用 # 號來定義私有成員的規範。Chrome 74<sup>+</sup> 和 Node 12<sup>+</sup> 已經實現了該私有成員定義的規範。ide

JavaScript 和 ECMAScript 有什麼關係?工具

ECMAScript 由 ECMA-262 標準定義,是一個語言規範(Specification);JavaScript 是該規範的一個實現。拿上面的問題去搜索引擎上搜索一下,能夠查閱到更詳盡的答案。this

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 等瀏覽覽器的開發者工具控制檯中運行都沒有問題。設計

相關文章
相關標籤/搜索