最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ES6 Class中實現(xiàn)私有屬性的一些方法總結(jié)

 更新時間:2019年07月08日 09:48:57   作者:_安歌  
這篇文章主要給大家介紹了關(guān)于ES6 Class中實現(xiàn)私有屬性的一些方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用ES6具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

私有屬性

私有屬性是面向?qū)ο缶幊蹋∣OP)中非常常見的一個特性,一般滿足以下的特點:

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

備胎Class

時間回到四年前,2015年6月,ES6發(fā)布成為標(biāo)準(zhǔn),為了紀(jì)念這個歷史性時刻,這個標(biāo)準(zhǔn)又被稱為ES2015,至此,JavaScript中的class從備胎中轉(zhuǎn)正。在這之前,class一直作為JS的關(guān)鍵字,雪藏不見天日。
class被認(rèn)為是JS的一種語法糖,它為JavaScript帶來了用面向?qū)ο蟮乃枷朊枋鲆粋€實體的能力。但似乎還遠(yuǎn)遠(yuǎn)不夠,class的能力遠(yuǎn)沒滿足JS開發(fā)者們的期待。于是,TC39的大佬們也努力地去做到更好,并推出了一項新的提案:

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

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

提案已經(jīng)到Stage 3了,未來可期!

可是,一眾JSer們已經(jīng)等不及了......

JSer的掙扎

通過對數(shù)據(jù)的一定封裝,JS開發(fā)者們走上了曲線實現(xiàn)“私有屬性”之路。

1. 約定俗成

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

2. 閉包

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

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

3. Symbols & Getters

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

可是,也不是毫無破綻:

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

4. WeakMap & Getters

WeakMap的實現(xiàn)與Symbol如出一轍。

巨人的肩膀

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

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

最后,關(guān)于JS中實現(xiàn)私有屬性,歡迎讀者們評論交流你的看法~

參照:

ECMAScript Classes - Keeping Things Private

原文:Github

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。

相關(guān)文章

最新評論

克拉玛依市| 沂水县| 商河县| 固安县| 九江市| 丰都县| 博爱县| 新邵县| 北安市| 大港区| 高雄市| 上思县| 武陟县| 英超| 犍为县| 鄄城县| 花莲县| 葵青区| 万年县| 崇义县| 黄山市| 万宁市| 广灵县| 兴业县| 凉山| 祁门县| 武冈市| 特克斯县| 永登县| 曲周县| 蚌埠市| 龙岩市| 东源县| 博湖县| 琼中| 鄂尔多斯市| 霍林郭勒市| 开封县| 商城县| 雷州市| 忻城县|