91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ES6 Class中實現私有屬性的一些方法總結

發布時間:2020-09-28 19:45:36 來源:腳本之家 閱讀:152 作者:_安歌 欄目:web開發

私有屬性

私有屬性是面向對象編程(OOP)中非常常見的一個特性,一般滿足以下的特點:

  • 能被class內部的不同方法訪問,但不能在類外部被訪問;
  • 子類不能繼承父類的私有屬性。

備胎Class

時間回到四年前,2015年6月,ES6發布成為標準,為了紀念這個歷史性時刻,這個標準又被稱為ES2015,至此,JavaScript中的class從備胎中轉正。在這之前,class一直作為JS的關鍵字,雪藏不見天日。
class被認為是JS的一種語法糖,它為JavaScript帶來了用面向對象的思想描述一個實體的能力。但似乎還遠遠不夠,class的能力遠沒滿足JS開發者們的期待。于是,TC39的大佬們也努力地去做到更好,并推出了一項新的提案:

class Foo {
 #a; // 私有屬性
 constructor(a, b) {
 this.#a = a;
 this.b = b
 }
}

上面私有屬性的聲明,需要先經過Babel等編譯器編譯后才能正常使用。

提案已經到Stage 3了,未來可期!

可是,一眾JSer們已經等不及了......

JSer的掙扎

通過對數據的一定封裝,JS開發者們走上了曲線實現“私有屬性”之路。

1. 約定俗成

JS界以一種不成文的規定,在變量前加上下劃線"_"前綴,約定這是一個私有屬性;但實際上,它仍然是一個穿上皇帝新衣般的公共屬性。

ES6 Class中實現私有屬性的一些方法總結

2. 閉包

在constructor作用域內定義局部變量,內部載通過閉包的方式對外暴露該變量。

這種方式,雖然實現了私有屬性外部不可訪問,但在類內部,該屬性同樣沒法在不同的方法內共享,仍然不是嚴格意義上的“私有屬性”。

ES6 Class中實現私有屬性的一些方法總結

3. Symbols & Getters

利用Symbol變量可以作為對象key的特點,我們可以模擬實現更真實的私有屬性。

ES6 Class中實現私有屬性的一些方法總結

可是,也不是毫無破綻:

ES6 Class中實現私有屬性的一些方法總結

借助getOwnPropertySymbols方法可以取出對象的Symbol鍵值。

4. WeakMap & Getters

WeakMap的實現與Symbol如出一轍。

ES6 Class中實現私有屬性的一些方法總結

巨人的肩膀

以上,是目前階段JS實現屬性私有比較可行的方案,可能實際中很少應用,但如果你在面試中遇到這個問題,或許這些方案可以參考下。

然后,所有這些方案里面,建議選TypeScript的private。

最后,關于JS中實現私有屬性,歡迎讀者們評論交流你的看法~

參照:

ECMAScript Classes - Keeping Things Private

原文:Github

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沿河| 兴文县| 独山县| 定远县| 巨野县| 田东县| 连州市| 镇江市| 新晃| 信阳市| 右玉县| 靖远县| 大化| 芦溪县| 台北市| 临泉县| 湖南省| 浑源县| 六安市| 隆安县| 宜川县| 阜平县| 浙江省| 湖南省| 汝阳县| 清流县| 海阳市| 新邵县| 余江县| 淮北市| 延边| 呼图壁县| 华亭县| 南川市| 萍乡市| 安义县| 沽源县| 封丘县| 博野县| 韶山市| 高台县|