Прежде всего, пара вещей:
Другой способ взглянуть на JavaScript - это 1 миллион и 1 вещь, которую вы можете сделать с помощью функции в качестве конструкции. Это все там, если вы ищете это. Это просто никогда не далеко от функции.
Эта вещь создания плагина jQuery ужасна. Я понятия не имею, почему они защищают это. $ extensions должен быть материалом общего назначения, который уже довольно хорошо описан в методах $ build-me-a-complete-widget. Это инструмент нормализации DOM-API. Его использование лучше всего скрывать внутри ваших собственных объектов. Я не вижу привлекательности использования его в качестве полноценного хранилища пользовательского интерфейса библиотеки.
Пакеты в клиентской сети бессмысленны
Что лично мне не нравится в пакетах в клиентской сети, так это то, что мы притворяемся, что делаем то, чего на самом деле нет. В мире веб-форм Post .NET и ужасных вещей, которые никогда не панорамируются нашими друзьями на Java, я бы предпочел, чтобы кусок HTML со связанными ресурсами был тем, чем он является на самом деле. и не пытаться успокоить обучающихся разработчиков новых приложений для ОС, притворяясь, что это что-то другое. В JS в клиентской сети ничего не «импортируется», если не делать что-то ужасное с Ajax, которое работает в неведении о кешировании браузера, что, да, многие пытались сделать. Все, что имеет значение для браузера, это то, что он был загружен и интерпретирован или не был. У нас нет больше кода, спрятанного на клиенте, где-то доступном для использования «на всякий случай» по уважительным причинам. # 1 в том, что я только что описал зависимости плагинов и плагинов браузеров для веб-приложений, как явление, как правило, не сработало слишком хорошо. Мы хотим веб сейчас. Не после обновления Adobe или Sun в третий раз на этой неделе.
Язык имеет то, что ему нужно для структуры
Объекты JS очень изменчивы. Мы можем иметь ветвящиеся деревья пространств имен в любой степени, в которой мы находим это полезным, и это очень легко сделать. Но да, для того, чтобы что-то повторно использовать, вы должны придерживаться корня любой библиотеки в глобальном пространстве. В любом случае все зависимости связаны и загружаются одновременно, так какой смысл делать что-то еще? Смысл избегать глобального пространства имен не в том, что там что-то плохое. Дело в том, что слишком много плохого, потому что вы рискуете столкнуться с пространством имен или случайно перезаписать основные языковые функции.
Просто потому, что это популярно, не значит, что мы все делаем правильно
Теперь, когда вы видите это во всем клиентском веб-приложении:
(function(){
//lots of functions defined and fired and statement code here
})()
Проблема не в том, что нам не хватает инструментов для структурирования приложения, проблема в том, что люди не ценят структуру. Для одноразовых временных сайтов на 2-3 страницы в дизайнерском агентстве у меня действительно нет проблем с этим. Все становится уродливым, когда вам нужно создать что-то удобное в обслуживании, легко читаемое и легко изменяемое.
Но когда вы попадаете в то место, где пришло время просто реализовать все повторно используемые объекты и фабрики, и, возможно, один или два новых временных файла могут заползти в этот процесс, это удобно.
Но есть реализации JS с пакетами / модулями
Имейте в виду, что в Node.js, где такие вещи имеют больше смысла, у них есть модули. JS, предполагая, что мы можем избежать uber-config-hell, который преследует другие языки, является единственным в уравнении, и каждый исполняемый файл имеет свою собственную изолированную область видимости. Но на веб-странице ссылка на js-файл сама по себе является оператором импорта. Выполнение большего количества операций импорта на лету - просто пустая трата времени и ресурсов, поскольку получение ресурсов требует гораздо больше усилий, чем просто добавление ссылок на файлы по мере их необходимости, зная, что они будут кэшироваться в браузере, если они понадобятся другой странице. Поэтому мы пытаемся разделить глобальное пространство, выполняя что-либо, кроме создания фабрик объектов-адаптеров, таких как jQuery, или более традиционных объектов, которые охватывают большой набор задач в данном домене, занимая одно место в глобальном пространстве. Там'http://wiki.ecmascript.org/doku.php?id=harmony:modules
Так что нет, в автоматических вызовах нет ничего плохого, чтобы избежать загрязнения глобального пространства имен, когда есть веская причина использовать такие вещи (чаще всего нет). И у нас есть постоянные приватно-эквивалентные свойства в наших объектах (просто определите переменную в конструкторе и не выставляйте ее как свойство).
Однако тот факт, что мы МОЖЕМ делать такие вещи, потрясающий. Интенсивное использование - это признак того, что разработчики JS, возможно, все еще находятся на стадии становления, но это не зияющая дыра в языке для тех, кто не пытается навязать парадигму в клиентскую сеть, которая здесь просто не имеет смысла.