提案已經到Stage 3了,未來可期!
可是,一眾JSer們已經等不及了......
JSer的掙扎
通過對數據的一定封裝,JS開發者們走上了曲線實現“私有屬性”之路。
1. 約定俗成
JS界以一種不成文的規定,在變量前加上下劃線"_"前綴,約定這是一個私有屬性;但實際上,它仍然是一個穿上皇帝新衣般的公共屬性。
2. 閉包
在constructor作用域內定義局部變量,內部載通過閉包的方式對外暴露該變量。
這種方式,雖然實現了私有屬性外部不可訪問,但在類內部,該屬性同樣沒法在不同的方法內共享,仍然不是嚴格意義上的“私有屬性”。
3. Symbols & Getters
利用Symbol變量可以作為對象key的特點,我們可以模擬實現更真實的私有屬性。
可是,也不是毫無破綻:
借助getOwnPropertySymbols方法可以取出對象的Symbol鍵值。
4. WeakMap & Getters
WeakMap的實現與Symbol如出一轍。
巨人的肩膀
以上,是目前階段JS實現屬性私有比較可行的方案,可能實際中很少應用,但如果你在面試中遇到這個問題,或許這些方案可以參考下。
然后,所有這些方案里面,建議選TypeScript的private。
最后,關于JS中實現私有屬性,歡迎讀者們評論交流你的看法~
參照:
ECMAScript Classes - Keeping Things Private
原文:Github
總結
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com