sorry_i_noob, на первый вопрос отвечу легко: потому что их пишут такие же люди, которые недавно искали ответы на свои вопросы.
На второй вопрос не отвечу совсем. Учитесь думать "во времени", а что будет если условия изменятся, если заказчик скажет "хочу вот так теперь чтобы было". Как быстро вы сможете адаптировать то, что написали, под пока еще неизвестно что.
Сложно. Знаю. Возможно это даётся только с опытом. Возможно есть умные книжки, которые дадут толчок в нужном направлении.
sorry_i_noob, не совсем понял, как вы пришли к этому выводу, но в общем-то, да. я так и пишу. вы видите в этом проблему? я нет. зато при необходимости я легко методом копипасты переношу куски кода из проекта в проект практически без правок. Или даже оформляю как npm-пакет.
А если у меня действие (результат нажатия. точнее, JS код, который срабатывает при нажатии) для кнопки уникально.
Если вы пишете говносайт, про который никто и не вспомнит через пару месяцев — можете вообще писать как угодно.
Во всех остальных случаях вы не можете на сто процентов быть уверены в уникальности действия в долгосрочной перспективе.
Вот еще пример https://codepen.io/delphinpro/pen/dWpxjg
Несколько замечаний.
Использован jQuery, но без animate, только операции добавления/удаления классов и стилей. Легко заменяется на ванильный жс.
Использованы CSS переходы, никаких анимаций в самом джаваскрипте. Легко можно менять стиль анимации через тайминг-функцию.
Анимируется свойство max-height, значение которого вычисляется.
Не применяется display:none, что немного упрощает получение реальной высоты блока.
Вам нужно понять два термина — класс и объект.
Класс является описание для объекта. По описанию создаётся сам объект. Тут всё просто, это вы наверняка знаете.
Обычный метод является методом создаваемого объекта.
Тогда как статический метод принадлежит самому классу.
Вот это вот уяснить и сразу станет понятно когда можно или нужно использовать статику.
у вас не так?