簡體   English   中英

使用揭示模式使 ES6 類屬性私有

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM