molily: IE und Ajax

Beitrag lesen

2 en

Noch lustiger und m.M.n. einfach abwegig ist der Vorschlag, dass man jede seiner Methoden selbst an den Prototypen mit Namespace-Präfixen versehen sollte, am besten hierarchisch als umgekehrter Domainname.

Es ist nicht toll, dass Bibliotheken, die auf Wiederverwendbarkeit zielen, den globalen Namensraum und die Kernobjekte »verpesten«. Dahinter steckt aber eher das »totalitäre« Konzept von Prototype und Co. Konflikte sind vorprogrammiert, sodass eigentlich alle weiteren Scripte »Plugins« des verwendeten Frameworks sein müssen, deren Schnittstellen automatisch erkennen müssen (also Framework-übergreifend mit deren Hilfe arbeiten) oder extrem vorsichtig arbeiten und auf Koexistenz setzen müssen.

Eine wirklich elegante Lösung kenne ich nicht. Ultralange Namespace-Ketten wie YAHOO.util.Module.methode und dergleichen gehen mir gegen den Strich und sind genau das, was ich mit einer Bibliothek mit einem vernünftigen Konzept zu vermeiden suche. Gleichzeitig halte ich eine komplette Kapselung und die Erfindung eines eigenen Universums wie in jQuery für »nicht JavaScript-gerecht« - wozu habe ich denn das DOM mit seinen schönen Interfaces und ECMAScript mit erweiterbaren Kernobjekten.

Die Anforderungen, die Michaux u.a. an Bibliotheken herantragen (bloß keine globalen Objekte erweitern!), halte ich für viel zu hoch. Absurd wird es, wenn er sogar fordert, selbst alle Bezeichner im HTML mit Präfixen zu versehen. Auf so ein fundamentales Dilemma, wie es Michaux ausführt, bin ich eigentlich noch nie bei der JavaScript-Programmierung gestoßen. Die Frage für mich ist, wieviel Kompatibilität mit anderem, fremden Code nötig ist, um Kollisionen zu vermeiden, und wie zukunftsfähig JavaScript-Code überhaupt sein kann und im Einzelfall muss.

Mein Interesse ginge auch eher in die andere Richtung: Nicht das Wegkapseln sollte man mal diskutieren, sondern das Etablieren von grundlegenden Funktionen. Die Zersplitterung und der Plugin-Wust geht mir nämlich auf die Nerven. Es ist doch absurd, dass jedes Script das Rad neu erfinden muss - oder einen eigenen Abstraktionslayer über die Abstraktionslayer der fünf großen Frameworks legen muss, um von ihnen unabhängig zu sein, aber mit ihnen zusammenarbeiten zu können.

Daher finde ich den Ansatz von base2 schon sehr gut, einfach die Standard-APIs browserübergreifend zu implementieren. Denn mit den neuesten Standards kann man schon vergleichsweise effizient, übersichtlich und größtenteils schmerzfrei programmieren (Verbesserungen gehen natürlich immer). Insofern freue ich mich auch insgeheim, dass Browserhersteller proprietäre Alleingänge machen und einfach Tatsachen schaffen, wie in Mozilla JS 1.6 - 1.8 geschehen. Da ist das Geschrei immer sehr groß, aber es werden endlich, wenn auch auf unschönem Wege, Konventionen wie Array.prototype.each und Co. etabliert.

Mathias