Как правильно использовать изолированные модули в JS?
Такие дела.
Сегодня я в тысячный раз осознал, что не смыслю в JS (сколько бы раз мне не казалось, что я постиг дзен).
Строю логику JS на модулях с помощью browserify.
Каждый модуль - это класс.
И вот я работаю, проект растет, начинаю модули подключать друг к другу.
И тут я понял, что каждый модуль на 1000% живет по своему и не знает о других: мне надо было использовать переменные модуля, заданные в конструкторе (this.mode = 'search'), в других модулях. Т.е. этот модуль должен отвечать за режим на сайте - режим поиска или обычный.
Но это оказалось невозможным. Так же, как и использовать переменные этого модуля (измененные внутри него) в методах этого модуля, вызываемых в других (надеюсь, понятно).
Как же тогда быть в такой ситуации?
Мне надо, чтобы все-все модули понимали, что сайт в определенном режиме.
Stalker_RED: вряд ли получится код предоставить, слишком много его.
Суть вот в чем: есть три модуля, один из них содержит некую переменную, отвечающую за состояние страницы, два других выполняют определенные действия в зависимости от значения этой переменной, в том числе, они могут менять эту переменную.
Но это так должно быть. Я теперь не знаю что со всем этим кодом делать, раз все рушится об это, у меня большие планы были по связям.
Денис Букреев: Так работает же.
Естественно при обращении к this.mode = 'search' из других объектов нужно использовать не this а указатель на тот объект, к свойству которого вы обращаетесь.
Stalker_RED: это все понятно.
У меня же ситуация капельку другая. Модули о работе друг друга не знают.
Если я в главный файл app.js инициализирую модуль, то остальные понятия о нем не имеют.
Если я импортирую какой-либо модуль в соседний - просто сделается новая копия модуля, отличная от того, что я импортирую в основной файл app.js
И в этом проблема.
Раньше я просто соединял файлы в один с помощью GULP - проблем не было. А вот с browserify такая борода получается (хотя радовался недавно, что воу как круто)
То что модули изолированы и ничего не знают друг о друге - это абсолютно правильный подход избавляющий от многих проблем
А для хранения общего состояния приложения посмотрите в сторону redux
Денис, вы нам сделайте пример на гитхаб. У вас, судя по всему, отсутствует понимание какой-то маленькой детали, а какой мы, в свою очередь, понять не можем, потому что вы не можете объяснить.
я вдоль и поперек изучил модульную систему. смысла не понял: классы сами по себе изолированы, зачем изолировать друг от друга их свойства? Таким образом, взаимодействовать между собой они не могут и разработка идет крахом.
Жаль, что я понял это только в середине работы.
Денис Букреев: ну вот вы мешаете все в кучу - модули, классы, свойства, экземпляры классов. У вас даже терминология не выработана, поэтому у вас проблемы.
Александр Марченко: почему?
модуль - отдельный js-файл, экспортирующий класс, у которого есть свойства и методы.
Методы я могу использовать в других модулях (классах), а свойства мне недоступны (крайний бред для работающих вместе скриптов).
Что тут можно не так сказать?
А так да, с теорией у меня проблемесы, потому что самоучка с не техническим складом ума, а сесть и изучить все нюансы либо нет времени, либо нудно (начинаешь засыпать, когда ради какой-то маленькой теории читаешь главу на несколько десятков страниц из которой знаешь 90% информации).
Приходится по крупинкам собирать знания на практике.