Использование шаблона раскрытия, чтобы сделать свойства класса ES6 приватными

1

Я хочу, чтобы свойства класса Xl (класс ES6) были закрытыми, что предотвращает непосредственную работу с свойствами. Я решил использовать раскрывающий модуль, как показано ниже,

index.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)

Использует ли WeakMap в Xl классе лучше, чем этот подход? (Учитывая, что моя библиотека нацелена на IE 11+)

Я знаком с подходом использования getters/setters в конструкторе класса. Но я не предпочитаю этот подход, так как он создает экземпляр новых функций с каждым новым объектом.

  • 0
    Как это связано с классами ES6? Просто любопытно.
  • 1
    Я имею в виду, я не вижу никаких следов использования функций ES6 здесь вообще. Даже синтаксис модуля не так
Показать ещё 3 комментария
Теги:
ecmascript-6
design-patterns
es6-class
es6-modules

1 ответ

1
Лучший ответ

Я нарушаю какие-либо рекомендации или делаю что-то плохое здесь?

Не имеет значения, как X1 реализован, поскольку пользователи вашей библиотеки больше не видят этого. Невозможно использовать его как class ES6, например, возможность наследовать его. Экспортируемый Xiuli - это просто фабричная функция, возвращающая объектные литералы, а это значит, что даже instanceof будет работать.

Я знаком с подходом использования getters/setters в конструкторе класса. Но я не предпочитаю этот подход, так как он создает экземпляр новых функций с каждым новым объектом.

Ну, bind также создает новые функции, это совсем не лучше, а также дополнительный литерал объекта, который действует как обертка вокруг фактического экземпляра. Независимо от того, требуется ли это больше памяти, чем геттеры с расширенными конструкторами, зависит от количества частных "свойств" и количества общедоступных методов. Функция фабрики не выглядит намного проще в использовании, но использование геттеров, вероятно, более DRY.

  • 0
    число частных «свойств»> количество открытых методов. Как насчет использования WeakMap ?
  • 0
    Вы всегда можете это сделать, это, вероятно, намного более благоприятно для памяти, чем создание каких-либо объектов-функций, специфичных для экземпляра. (Лично мне не нравится синтаксис WeakMap)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню