欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

私有屬性

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

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

備胎Class

時間回到四年前,2015年6月,ES6發(fā)布成為標準,為了紀念這個歷史性時刻,這個標準又被稱為ES2015,至此,JavaScript中的class從備胎中轉(zhuǎn)正。在這之前,class一直作為JS的關(guān)鍵字,雪藏不見天日。
class被認為是JS的一種語法糖,它為JavaScript帶來了用面向?qū)ο蟮乃枷朊枋鲆粋€實體的能力。但似乎還遠遠不夠,class的能力遠沒滿足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)共享,仍然不是嚴格意義上的“私有屬性”。

3. Symbols & Getters

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

可是,也不是毫無破綻:

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

4. WeakMap & Getters

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

巨人的肩膀

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

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

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

參照:

ECMAScript Classes - Keeping Things Private

原文:Github

總結(jié)

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

相關(guān)文章

  • JS前端攻堅Eventbus實現(xiàn)更新示例詳解

    JS前端攻堅Eventbus實現(xiàn)更新示例詳解

    這篇文章主要為大家介紹了JS前端攻堅Eventbus實現(xiàn)更新示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • javascript實現(xiàn)避免頁面按鈕重復提交

    javascript實現(xiàn)避免頁面按鈕重復提交

    很多時候我們都需要防止重復提交,這方面的文章也比較多,實現(xiàn)的途徑差別也很大.因為有些時候即使服務器能夠識別重復的提交,也會造成問題.比如需要很長等待時間的操作,在首次提交后,不斷重復提交,頁面可能會死掉.用腳本來控制的話可以防止這種問題.
    2015-01-01
  • js小數(shù)運算出現(xiàn)多位小數(shù)如何解決

    js小數(shù)運算出現(xiàn)多位小數(shù)如何解決

    關(guān)于JavaScript小數(shù)進行加、減、乘、除出現(xiàn)多位小數(shù)問題,自己研究了一下,而且作了相關(guān)的測試,收獲不少知識點,需要的朋友可以參考下
    2015-10-10
  • 老生常談原生JS執(zhí)行環(huán)境與作用域

    老生常談原生JS執(zhí)行環(huán)境與作用域

    下面小編就為大家?guī)硪黄仙U勗鶭S執(zhí)行環(huán)境與作用域。小編覺得挺不錯的,希望對大家有所幫助。一起跟隨小編過來看看吧,祝大家游戲愉快哦
    2016-11-11
  • 微信小程序如何使用globalData的方法

    微信小程序如何使用globalData的方法

    這篇文章主要介紹了微信小程序如何使用globalData的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • webpack打包js的方法

    webpack打包js的方法

    這篇文章主要介紹了webpack打包js的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • JavaScript常用方法和封裝詳情

    JavaScript常用方法和封裝詳情

    這篇文章主要介紹了JavaScript常用方法和封裝詳情,文章圍繞JavaScript的方法和封裝相關(guān)資料展開詳情,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • 關(guān)于JavaScript中name的意義沖突示例介紹

    關(guān)于JavaScript中name的意義沖突示例介紹

    這篇文章主要介紹了關(guān)于JavaScript中name的意義沖突,需要的朋友可以參考下
    2014-05-05
  • JS+CSS制作DIV層可(最小化/拖拽/排序)功能實現(xiàn)代碼

    JS+CSS制作DIV層可(最小化/拖拽/排序)功能實現(xiàn)代碼

    DIV層最小化和隨意拖拽排序,很多的愛好者都想實現(xiàn)這個功能,小編整理搜集了一下,希望本文的知識點可以幫助到你
    2013-02-02
  • JavaScript生成GUID的多種算法小結(jié)

    JavaScript生成GUID的多種算法小結(jié)

    這篇文章介紹了GUID的幾種生成算法,有需要的朋友可以參考一下
    2013-08-08

最新評論