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