Всем привет!
С js знаком давно, но на простеньком уровне - подключил/настроил, сделал плавную прокрутку или собрал данные с формы и тп.
Сейчас задача немного усложнилась, нужно сделать онлайн калькулятор - подсчет, зависимости, отображение результата с перечисление что было выбрано и двухстороннее удаление как со списка выбора так и с формы, ну в довершение собрать все это и подготовить к отправке на сервер. В целом, скрипт то я написал на нативном js, получилось довольно много кода, но все работало. Но вдруг, как это бывает, пошли правки - то одно заменить, то зависимость убрать и т.д., а в конце концов начали появляться производные от исходного калькулятора )) , они все похожие, но не копировать же код. Да и в итоге со всеми этими правками я понял, что написал не поддерживаемый код. Хотел перейти на фреймворк, но в последний момент решил все же закрыть на нативном для практики.
Сейчас встал вопрос выбора паттерна модуля. Почитал вот эту статью -
https://toddmotto.com/mastering-the-module-pattern/ и остановился на следующем варианте:
var Module = (function () {
var privateMethod = function () {
// private
};
var someMethod = function () {
// public
};
var anotherMethod = function () {
// public
};
return {
someMethod: someMethod,
anotherMethod: anotherMethod
};
})();
Но я не совсем понимаю, это ведь не функция конструктор, как например тут:
function CoffeeMachine(power) {
this.waterAmount = 0;
var WATER_HEAT_CAPACITY = 4200;
var self = this;
function getBoilTime() {
return self.waterAmount * WATER_HEAT_CAPACITY * 80 / power;
}
function onReady() {
alert( 'Кофе готов!' );
}
this.run = function() {
setTimeout(onReady, getBoilTime());
};
}
Как этот паттерн использовать для нескольких калькуляторов? Или может я не тот паттерн выбрал? Или вообще не в ту сторону смотрю? ))
И еще вопрос, а как в модуле вешать обработчик событий EventTarget.addEventListener() ? Или как это правильно организовать?