Charakterystyka
Prototype to jeden z pierwszych frameworków napisanych w języku JavaScript, często kojarzony z nurtem Web 2.0. Zanim przejdziemy do dokładnego omówienia Prototype, przyjrzyjmy się genezie jego powstania.
Programiści w trakcie budowania w JavaScript coraz bardziej skomplikowanych aplikacji, musieli radzić sobie z problemem niejednolitego API przeglądarek. Proste manipulowanie elementami DOM, wysyłanie zapytania ajaksowego, czy też obsługa zdarzeń, wymagały odmiennej implementacji niemal dla każdej z liczących się na rynku przeglądarek. Powodowało to (oprócz większej ilości kodu do napisania) problemy z utrzymaniem aplikacji. Aby ułatwić sobie codzienną pracę programiści tworzyli specjalne wrappery, które umożliwiały pisanie jednolitego kodu niezależnego od szczegółów API udostępnianych przez przeglądarki. Początkowo były to małe kawałki kodu, używane przez front-end developerów w każdym nowym projekcie. Wraz z upływem czasu te małe kawałki kodu, rozrosły się do dosyć dużych bibliotek. Tak właśnie narodził się framework Prototype.
Twórca Prototype Sam Stephenson postawił sobie za zadanie upodobnienie JavaScriptu do innych języków obiektowych (w szczególności do Rubiego). Dziedziczenie oparte na klasach – zamiast na prototypach, wzbogacenie natywnych klas o nowe metody, dodanie obiektów typu Hash i Range miały służyć właśnie temu celowi.
Robienie z JavaScriptu języka czysto obiektowego ma zarówno zwolenników jak i przeciwników. Programiści mający doświadczenie w programowaniu obiektowym (choćby w Javie) preferują Prototype. Okazjonalnie kodujący webdesignerzy wybierają zazwyczaj jQuery. Możemy tutaj zaobserwować dwa podejścia podczas ustalania odpowiedzialności frameworka:
- Prototype – dołączony system klas, brak funkcji odpowiedzialnych za efekty wizualne.
- jQuery – brak wbudowanego systemu klas, obecność najważniejszych efektów wizualnych.
Tak więc w Prototype efekty wizualne są możliwe dopiero po załączeniu dodatkowej biblioteki (np: Script.aculo.us). Natomiast w jQuery zrezygnowano z dodatkowego sytemu klas uznając, że JavaScript tego typu rozwiązań nie potrzebuje.
Przykład kodu
Definiowanie klas
var Task = Class.create({
initialize: function(name, time, dueTo, priority, goal){
this.name = name;
this.time = time;
this.dueTo = dueTo;
this.priority = (!!priority)?priority:1
this.goal = goal;
}
});
Objekt Ajax
var url = "http://www.example.com/path/server_script";
var myAjax = new Ajax.Request(url, {
parameters: {
value1: $F("id_1"),
value2: $F("id_2")
},
onSuccess: showResponse,
onFailure: showError
});
Zalety
- Elegancka, oparta na klasach składnia.
- Spora liczba metod dodanych do obiektów natywnych.
- Rozszerzalne API.
Wady
- Mniejsza (w porównaniu z jQuery) ekspresywność.
- Rozwlekła manipulacja elementami DOM.
- Brak dobrej jakości kontrolek.
Na koniec: