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

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

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

私有屬性

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

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

備胎Class

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

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

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

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

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

JSer的掙扎

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

1. 約定俗成

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

2. 閉包

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

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

3. Symbols & Getters

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

可是,也不是毫無(wú)破綻:

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

4. WeakMap & Getters

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

巨人的肩膀

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

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

最后,關(guān)于JS中實(shí)現(xiàn)私有屬性,歡迎讀者們?cè)u(píng)論交流你的看法~

參照:

ECMAScript Classes - Keeping Things Private

原文:Github

總結(jié)

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

相關(guān)文章

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

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

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

    javascript實(shí)現(xiàn)避免頁(yè)面按鈕重復(fù)提交

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

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

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

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

    下面小編就為大家?guī)?lái)一篇老生常談原生JS執(zhí)行環(huán)境與作用域。小編覺(jué)得挺不錯(cuò)的,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧,祝大家游戲愉快哦
    2016-11-11
  • 微信小程序如何使用globalData的方法

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

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

    webpack打包js的方法

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

    JavaScript常用方法和封裝詳情

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

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

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

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

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

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

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

最新評(píng)論