[英]Using reveal pattern to make ES6 class properties private
我想將Xl
類(一個 ES6 類)屬性設為私有,從而防止對屬性的直接操作。 我選擇使用顯式模塊模式如下,
索引.js
import Xl from './xiuli';
function Xiuli(selector) {
const xiuli = new Xl(selector);
return {
goto: xiuli.goto.bind(xiuli),
pre: xiuli.pre.bind(xiuli),
next: xiuli.next.bind(xiuli),
onTransitionend: xiuli.onTransitionend.bind(xiuli),
};
}
module.exports = Xiuli;
我是否違反了任何最佳實踐或在這里做了什么壞事? 特別是在xiuli.<method>.bind(xiuli)
在Xl
類中使用WeakMap
是否比這種方法更好? (鑒於我的庫面向 IE 11+)
我熟悉在類構造函數中使用 getter/setter 的方法。 但我不喜歡這種方法,因為它會為每個新對象創建新的函數實例。
我是否違反了任何最佳實踐或在這里做了什么壞事?
X1
的實現方式不再重要,因為您的庫的用戶不再看到它。 不可能再利用它作為 ES6 class
優勢,例如能夠繼承它。 導出的Xiuli
只是一個返回對象字面量的工廠函數,這意味着即使instanceof
也不再起作用。
我熟悉在類構造函數中使用 getter/setter 的方法。 但我不喜歡這種方法,因為它會為每個新對象創建新的函數實例。
好吧, bind
也確實創建了新函數,它一點也不好,而且還有額外的對象文字充當實際實例的包裝器。 這是否比構造函數范圍的 getter 需要更多內存取決於私有“屬性”的數量與公共方法的數量。 不過,工廠函數看起來並不容易使用,而且使用 getter 可能更 DRY。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.