14. Mai 2013 | 1 Comment Heute möchte ich auf das Javascript Framework eingehen das ich beinahe täglich im Büro verwende: Prototype. Prototype hat, wie letzte Woche schon berichtet, einige Ähnlichkeit mit MooTools (oder andersrum ;)) – Die einzelnen Komponenten sind sehr sauber in einzelne Klassen unterteilt und erweitern teilweise die nativen Javascript Objekte (String, Array, Object, …). Prototype hat eigentlich nur ein Problem: Es wird inzwischen nur noch von einer Person, Andrew Dupont, entwickelt – Dadurch kommt es leider zu einer sehr langsamen weiterentwicklung. Es gab eine lange Zeit, da war jQuery für mich das „Non plus ultra“… Doch das änderte sich vor etwas weniger als zwei Jahren. Hat man einmal angefangen mit einem objektorientiertem Framework zu arbeiten fällt einem der Rückschritt schwer, oder? Aber das ist eine andere Geschichte 🙂 Heute möchte ich über die Vor- und Nachteile von Prototype schreiben. Die Geschichte des Prototype Javascript Frameworks Prototype war eines der ersten Javascript Frameworks, wie wir sie Heute kennen – viele Alternativen gab es damals noch nicht. Das Projekt wurde 2005 von Sam Stephenson ins Leben gerufen und bis 2010 begleitet (laut seinem Portfolio und Wikipedia). Leider sind in der Vergangenheit die meisten Entwickler vom Projekt abgesprungen. Die Gegenwart Wie eingangs geschrieben wird Prototype nur noch von Andrew Dupont aktiv weiterentwickelt. Es gibt zwar hier und da ein paar Pull-Requests auf github doch dabei handelt es sich in der Regel eher um kleinere Fixes anstatt neuer Features. „Stirbt“ Prototype? Das will ich wirklich nicht hoffen – Laut dem Blog auf prototypejs.org ist Prototype weit davon entfernt… Viel eher befindet sich die Entwicklung in einem „Ruhemodus“ 😉 Vorteile der Objektorientierung Im Gegensatz zu jQuery, wo alles über „$“ gemacht wird, bietet Prototype einige Klassen die, je nach Anwendungsfall, weiterhelfen: Ihr braucht einen „Datenspeicher“? Benutzt das Hash Objekt (Oder die Abkürzung $H)! Dieses bietet einige Funktionen wie „get()„, „set()„, „merge()“ und sonstige Methoden, die von „Enumerable“ geerbt werden: // Wir gehen von ein paar Daten aus... var daten = {"x":[1,2,3], "y":"String"}; // Diese Daten möchten wir in einem Hash Objekt ablegen... var daten = $H(daten); Ihr möchtet einen Ajax-Request absenden? Ajax ist das Objekt, das ihr braucht: new Ajax.Request('/ajax/url', { /* Optionale Optionen... */ onSuccess: function(response) { // Callback Funktion im Erfolgsfall } }); Klassen und Objekte + Vererbung? Check. Hierfür gibt es das „Class“ Objekt: // Wir erstellen eine "Vater" Klasse. var Vater = Class.create({ initialize:function(name) { this.name = name; }, sage_name:function() { alert('Hallo, mein Name ist ' + this.name); } }); // Und eine "Kind" Klasse, die von "Vater" erbt. var Kind = Class.create(Vater, { /* * Hier können eigene Methoden eingebracht werden, * oder die von "Vater" überschrieben werden */ }); var Sohn = new Kind('Klaus'); // Wird "Hallo, mein Name ist Klaus" ausgeben. Sohn.sage_name(); Und so in etwa geht es immer weiter – Es ist eigentlich für alles gesorgt. Und was sind die Nachteile? Direkte „Nachteile“ gibt es meiner Meinung nach nicht – lediglich ein paar „Unschönheiten“ gegenüber anderen Frameworks, wie z.B. jQuery. So muss man bei Prototype immer sehr spezifisch werden, wenn es darum geht Elemente oder Werte abzufragen… Das hier: // jQuery Beispiele: // Setzen von Schriftfarbe auf n-Elemente $('.selektor').css('color', '#f80'); // Auslesen von Schriftfarbe: $('.selektor').css('color'); Schaut bei Prototype etwas anders aus: // Prototype Beispiele: // Setzen von Schriftfarbe auf n-Elemente $$('.selektor').invoke('setStyle', {'color':"#f00"}); // Auslesen von Schriftfarbe: $$('.selektor').invoke('getStyle', 'color'); Die „invoke()“ Methode ist zu vergleichen mit PHPs array_map – es führt eine Funktion (oder Callback) für alle, im Array befindlichen, Elemente aus. Das müssen wir tun weil Prototype, anders als jQuery, nicht automatisch über jedes Element iteriert und die gegebene Methode benutzt. Ähnliche „Unschönheiten“ gibt es noch an einigen anderen Stellen… Doch von „Nachteilen“ würde ich dabei nicht reden. Im übrigen habe ich noch ein paar weitere Frameworks gefunden, unter anderem XUI und $dom (dollardom) doch diese hatten mir nicht genug geboten um einen Blogeintrag darüber zu verfassen… Ich denke ich werde hier für Heute schluss machen und mich nächste Woche mit einem neuen Posting melden! Bis dahin wünsche ich euch eine angenehme Woche und natürlich Happy Coding!