Как правильно организовать модуль на javascript?

Всем привет!

С 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() ? Или как это правильно организовать?
  • Вопрос задан
  • 378 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы