Prototypový rámec JavaScriptu - Prototype JavaScript Framework
Původní autoři | Sam Stephenson |
---|---|
Vývojáři | Prototypový základní tým |
První vydání | Únor 2005 |
Stabilní uvolnění | 1.7.3 / 22. září 2015 |
Úložiště | ![]() |
Napsáno | JavaScript |
Typ | Knihovna JavaScript |
Licence | Licence MIT |
webová stránka | prototypejs |
The Prototypový rámec JavaScriptu je JavaScript rámec vytvořil Sam Stephenson v únoru 2005 jako součást základu pro Ajax podpora v Ruby on Rails. Je implementován jako jeden soubor kódu JavaScript, obvykle pojmenovaný prototype.js. Prototyp je distribuován samostatně, ale také jako součást větších projektů, jako je Ruby on Rails, script.aculo.us a Rico. V listopadu 2015 podle jednoho průzkumu používá prototyp 2,2% všech webových stránek.[1]
Funkce
Prototyp poskytuje různé funkce pro vývoj aplikací JavaScriptu. Funkce sahají od programovacích zkratek po hlavní funkce pro práci s nimi XMLHttpRequest.
Prototyp také poskytuje podporu knihovních funkcí třídy a objekty založené na třídách.[2][3] V JavaScriptu je vytváření objektů prototyp místo toho: funkce vytváření objektů může mít a prototyp vlastnost a jakýkoli objekt přiřazený k této vlastnosti bude použit jako prototyp pro objekty vytvořené pomocí této funkce. Rámec prototypu nelze zaměňovat s touto jazykovou funkcí.
Ukázkové obslužné funkce
Funkce $ ()
The dolarová funkce, $ (), lze použít jako zkratku pro getElementById funkce. Odkaz na prvek v souboru Model objektu dokumentu (DOM) z HTML stránka, obvyklá funkce identifikující prvek je:
dokument.getElementById(„id_of_element“).styl.barva = „#ffffff“;
Funkce $ () snižuje kód na:
$(„id_of_element“).setStyle({barva: '#ffffff'});
Funkce $ () může také přijmout prvek jako parametr a vrátí, stejně jako v předchozím příkladu, prototyp rozšířeného objektu.
var domElement = dokument.getElementById(„id_of_element“); // Vrátil se obvyklý odkaz na objektvar prototypeEnhancedDomElement = $(domElement); // Prototyp rozšířeného odkazu na objekt
- Poznámka: Jako podtržítko (
_
),$
znak je legální „slovní znak“ v identifikátorech JavaScriptu a nemá v jazyce žádný jiný význam. Byl přidán do jazyka současně s podporou pro regulární výrazy, takže Perl podobné proměnné lze napodobit, například$`
a$'
.
Funkce $ F ()
V návaznosti na $()
funkce: $ F ()
funkce vrací hodnotu požadovaného prvku formuláře. U 'textového' vstupu funkce vrátí data obsažená v prvku. U vstupního prvku „select“ vrátí funkce aktuálně vybranou hodnotu.
$ F(„id_of_input_element“)
Funkce $$ ()
The dolar dolar funkce je prototyp CSS Motor voliče. Vrátí všechny odpovídající prvky podle stejných pravidel jako selektor v šabloně stylů CSS. Například pokud chcete získat vše <a>
prvky třídy „pulzovat“, použili byste následující:
$$("a.pulsate")
Tím se vrátí kolekce prvků. Pokud používáte script.aculo.us rozšíření základní knihovny Prototypů, můžete efekt „pulzování“ (blikání) použít následovně:
$$("a.pulsate").každý(Účinek.Pulsovat);
Objekt Ajax
Ve snaze snížit množství kódu potřebného ke spuštění cross-browseru XMLHttpRequest
funkce, Prototyp poskytuje Ajax
namítat abstrahovat různé prohlížeče. Má dvě hlavní metody: Ajax.Request ()
a Ajax.Updater ()
Existují dvě formy Ajax
objekt. Ajax. Žádost
vrací nezpracovaný výstup XML z volání AJAX, zatímco Ajax.Updater
vloží návrat do zadaného objektu DOM Ajax. Žádost
níže najde aktuální hodnoty dvou vstupních prvků formuláře HTML, vydá požadavek HTTP POST na server s těmito páry název / hodnota prvku a spustí vlastní funkci (tzv. showResponse
níže), když je odpověď HTTP přijata ze serveru:
Nový Ajax.Žádost(„http: // localhost / server_script“, { parametry: { hodnota1: $ F(„form_element_id_1“), hodnota2: $ F(„form_element_id_2“) }, naÚspěch: showResponse, onFailure: showError});
Objektově orientované programování
Prototyp také přidává podporu pro tradičnější objektově orientované programování. The Class.create ()
metoda se používá k vytvoření nové třídy. Třídě se poté přiřadí a prototyp
který funguje jako plán pro instance třídy.
var První třída = Třída.vytvořit( { // Inicializační metoda slouží jako konstruktor inicializovat: funkce () { tento.data = "Ahoj světe"; }});
Rozšíření další třídy:
Ajax.Žádost = Třída.vytvořit( Ajax.Základna, { // Přepsat metodu inicializace inicializovat: funkce(url, možnosti) { tento.doprava = Ajax.getTransport(); tento.setOptions(možnosti); tento.žádost(url); }, // ... přidat více metod ...});
Rámec funkce Object.extend (dest, src)
vezme dva objekty jako parametry a zkopíruje vlastnosti druhého objektu do prvního simulujícího dědičnost. Kombinovaný objekt je také vrácen jako výsledek funkce. Stejně jako v příkladu výše, první parametr obvykle vytváří základní objekt, zatímco druhý je anonymní objekt používaný pouze pro definování dalších vlastností. Celá deklarace podtřídy se děje v závorkách volání funkce.
Problémy
Na rozdíl od jiných knihoven JavaScriptu jako jQuery Prototyp rozšiřuje DOM. Existují plány, jak to změnit v další hlavní verzi knihovny.[4]
V dubnu 2010 blogger Juriy 'kangax' Zaytsev (z Prototype Core) podrobně popsal problémy, které mohou vyplývat z opičí záplaty nové metody a vlastnosti do objektů definovaných W3C DOM.[4] Tyto nápady odrážejí myšlenky publikované v březnu 2010 společností Yahoo! vývojář Nicholas C. Zakas[5] Byly shrnuty následovně[6]
- Problémy s více prohlížeči: na hostitelské objekty se nevztahují pravidla, nevyhovující chování IE DOM atd.
- Šance na kolize jména
- Výkon režie
Do roku 2008 již byly dokumentovány konkrétní problémy s používáním metod rozšíření DOM ve starších verzích Prototype v kombinaci s novějšími verzemi současných prohlížečů.[7] Spíše než přidávat nové metody a vlastnosti k již existujícím „hostitelským“ objektům DOM, jako jsou Živel
, jako element.hide ()
, řešením těchto problémů je poskytnout obklopující objekty kolem těchto hostitelských objektů a implementovat na nich nové metody. jQuery
je takový obalový objekt v knihovně tohoto jména.[4]
Nyní se obecně očekává, že většina z těchto nápadů a problémů bude řešena ve vydání Prototype 2.0, ale vývojáři Prototypů se budou muset naučit pracovat se změněnou syntaxí a mnoho stávajících kódů Prototypů bude zastaralé.[6]
Viz také
Reference
- ^ Využití knihoven JavaScript pro webové stránky
- ^ "Prototypový rámec JavaScriptu | Definování tříd a dědičnosti". prototypejs.org. Citováno 5. června 2020.
- ^ "Podrobnosti o objektovém modelu". Webové dokumenty MDN. Citováno 5. června 2020.
- ^ A b C kangax (5. dubna 2010). „Co se děje s rozšířením DOM“. Citováno 6. dubna 2010.
- ^ Zakas, Nicholas C. (2. března 2010). „Udržovatelný JavaScript: Neupravujte objekty, které nevlastníte“. Citováno 6. dubna 2010.
- ^ A b Almaer, Dion (6. dubna 2010). „Prototyp 2.0 nebude rozšiřovat DOM“. Citováno 6. dubna 2010.
- ^ Resig, John (26. března 2008). "getElementsByClassName před prototypem 1.6". Citováno 6. dubna 2010.
Bibliografie
- Orchard, Leslie M .; Pehlivanian, Ara; Koon, Scott; Jones, Harley (31. srpna 2009). Profesionální rámce JavaScript: Prototyp, YUI, ExtJS, Dojo a MooTools (1. vyd.). Wrox Press. p. 888. ISBN 978-0-470-38459-6.