Я хочу, чтобы свойства класса 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 в конструкторе класса. Но я не предпочитаю этот подход, так как он создает экземпляр новых функций с каждым новым объектом.
Я нарушаю какие-либо рекомендации или делаю что-то плохое здесь?
Не имеет значения, как X1
реализован, поскольку пользователи вашей библиотеки больше не видят этого. Невозможно использовать его как class
ES6, например, возможность наследовать его. Экспортируемый Xiuli
- это просто фабричная функция, возвращающая объектные литералы, а это значит, что даже instanceof
будет работать.
Я знаком с подходом использования getters/setters в конструкторе класса. Но я не предпочитаю этот подход, так как он создает экземпляр новых функций с каждым новым объектом.
Ну, bind
также создает новые функции, это совсем не лучше, а также дополнительный литерал объекта, который действует как обертка вокруг фактического экземпляра. Независимо от того, требуется ли это больше памяти, чем геттеры с расширенными конструкторами, зависит от количества частных "свойств" и количества общедоступных методов. Функция фабрики не выглядит намного проще в использовании, но использование геттеров, вероятно, более DRY.
WeakMap
?