Zunächst ein paar Dinge:
Eine andere Sichtweise auf JavaScript sind die 1 Million und 1 Dinge, die Sie mit der Funktion als Konstrukt tun können. Es ist alles da, wenn Sie danach suchen. Es ist einfach nie weit von einer Funktion entfernt.
Das jQuery-Plug-in-Authoring-Ding ist schrecklich. Ich habe keine Ahnung, warum sie das befürworten. $ -Erweiterungen sollten allgemein verwendbare Dinge sein, die $ bereits ziemlich gut behandelt hat und keine Build-me-a-complete-Widget-Methoden. Es ist ein DOM-API-Normalisierungstool. Die Verwendung ist am besten in Ihren eigenen Objekten begraben. Ich sehe den Reiz, es als vollwertiges UI-Bibliotheks-Repository zu verwenden, nicht.
Pakete im clientseitigen Web sind sinnlos
Was ich persönlich an Paketen im clientseitigen Web nicht mag, ist, dass wir im Grunde so tun, als würden wir etwas tun, was wir wirklich nicht tun. In einem Post-.NET-Webformular und einem schrecklichen Zeug, das niemals aus unserer Java-Freundewelt herausgekommen ist, stelle ich mir lieber ein Stück HTML mit verknüpften Ressourcen als das vor, was es wirklich ist und versuchen Sie nicht, lernresistente OS-App-Entwickler zu beschwichtigen, indem Sie so tun, als wäre es etwas anderes. In JS auf der Client-Seite wird nichts "importiert", es sei denn, Ajax macht etwas Schreckliches, das Browser-Caching nicht kennt, was ja viele versucht haben. Für den Browser ist nur wichtig, dass er entweder geladen und interpretiert wurde oder nicht. Auf dem Client ist kein Code mehr gespeichert, der "nur für den Fall" verwendet werden kann. aus guten gründen. Das erste Problem ist, dass ich gerade die Plug-In- und Browser-Plug-In-Abhängigkeiten für Web-Apps als Phänomen beschrieben habe, das im Allgemeinen nicht gut funktioniert hat. Wir wollen jetzt Web. Nicht nach dem dritten Update von Adobe oder Sun in dieser Woche.
Die Sprache hat, was sie für die Struktur braucht
JS-Objekte sind in hohem Maße veränderbar. Wir können verzweigte Bäume von Namespaces haben, zu jedem Grad, den wir für nützlich halten und es ist sehr einfach zu tun. Aber ja, für alles, was wiederverwendbar ist, muss man die Wurzel einer Bibliothek im globalen Raum stecken. Alle Abhängigkeiten werden ohnehin gleichzeitig verknüpft und geladen. Wozu also sonst noch etwas tun? Der Punkt, den globalen Namespace zu vermeiden, ist nicht, dass irgendetwas dort schlecht ist. Es ist zu viel Zeug, weil Sie das Risiko von Namespace-Kollisionen oder versehentlichem Überschreiben von Kernsprachen-Features eingehen.
Nur weil es beliebt ist, heißt das noch lange nicht, dass wir es richtig machen
Wenn Sie dies nun in einer clientseitigen Web-App sehen:
(function(){
//lots of functions defined and fired and statement code here
})()
Das Problem ist nicht, dass uns Tools fehlen, um eine App zu strukturieren. Das Problem ist, dass die Leute die Struktur nicht schätzen. Für 2-3-seitige einmalige temporäre Wegwerfstellen bei einer Designagentur habe ich damit kein wirkliches Problem. Hässlich wird es, wenn Sie etwas Wartbares und Lesbares bauen müssen, das sich leicht modifizieren lässt.
Wenn Sie jedoch an den Ort gelangen, an dem es Zeit ist, alle wiederverwendbaren Objekte und Fabriken zu implementieren, und sich möglicherweise ein oder zwei neue temporäre Vars in diesen Prozess einschleichen, ist dies eine Annehmlichkeit.
Es gibt jedoch Implementierungen von JS mit Paketen / Modulen
Denken Sie daran, dass in Node.js, wo solche Dinge viel sinnvoller sind, Module vorhanden sind. JS ist das einzige, was in der Gleichung steht, vorausgesetzt, wir können die Uber-Config-Hölle vermeiden, die andere Sprachen plagt, und jede ausgeführte Datei hat ihren eigenen isolierten Gültigkeitsbereich. Auf einer Webseite ist das Verknüpfen einer js-Datei selbst die import-Anweisung. Schnelleres Importieren ist nur eine Verschwendung von Zeit und Ressourcen, da das Abrufen der Ressourcen viel mehr Aufwand erfordert als das Hinzufügen von Links zu Dateien, wenn Sie wissen, dass sie in einem Browser zwischengespeichert werden, wenn eine andere Seite sie erneut benötigt. Versuchen Sie also, den globalen Raum aufzuteilen, indem Sie etwas anderes tun, als Adapterobjektfactorys wie jQuery oder traditionellere Objekte zu erstellen, die eine große Teilmenge von Aufgaben in einer bestimmten Domäne abdecken und gleichzeitig einen Platz in der globalen Datenbank einnehmen. Dort'http://wiki.ecmascript.org/doku.php?id=harmony:modules
Nein, es ist nichts falsch an Auto-Invokern, die verwendet werden, um globale Namespace-Verschmutzung zu vermeiden, wenn es einen guten Grund gibt, solche Dinge zu verwenden (meistens gibt es keinen). Und wir haben persistente privat äquivalente Eigenschaften in unseren Objekten (definieren Sie einfach eine Variable im Konstruktor und machen Sie sie nicht als Eigenschaft verfügbar).
Die Tatsache, dass wir solche Dinge tun KÖNNEN, ist jedoch fantastisch. Starke Auslastung ist ein Zeichen dafür, dass JS-Entwickler vielleicht noch reifen, aber es ist kein Loch in der Sprache für jeden, der nicht versucht, ein Paradigma in das clientseitige Web zu zwingen, das hier einfach keinen Sinn ergibt.