JavaScript: Porovnání verzí
Smazaný obsah Přidaný obsah
-{{pravopis; to je stranka tak nezajimava, ze na ni nikdo pul roku nesahl?! značka: editace z Vizuálního editoru |
m Typografie |
||
Řádek 57:
==== Anonymní (vnitřní) funkce a uzávěry (closures) ====
Vnitřní [[Funkce (programování)|funkce]] (neboli funkce definované uvnitř jiných (vnějších) funkcí) jsou vytvořeny při každém zavolání funkce nadřazené, a proměnné funkcí vnějších existují po dobu existence funkce vnitřní, dokonce i po ukončení zavolání (tedy i po navrácení této vnitřní funkce, má daná funkce stále přístup k proměnným své funkce vnější) – toto je mechanismus v JavaScriptu nazývaný jako [[closure]]<nowiki/>s
=== Prototypové (prototype-based) ===
Řádek 92:
Ačkoliv má JavaScript určité prvky dědičnosti, nejedná se o klasickou dědičnost známou z typových jazyků C++ nebo Java. JavaScript nepodporuje zápis tříd (pouze konstruktor) a s tím spojenou hierarchii tříd, proto lze hovořit spíše o jakési simulaci (viz oddíl prototypy výše) dědičnosti, nazvanou dědičnost prototypová. Prototyp slouží jako zvláštní objekt, který je přidružen každé funkci (tedy i k funkci jako konstruktoru). Všechny objekty inicializované skrze nějaký konstruktor dědí, respektive sdílejí, vlastnosti a metody obsažené právě v prototypu daného konstruktoru.<br />
Podíváte-li se zpět na zápis konstruktoru <code>auto</code>, v objektu je vložená také metoda <code>vypisZnacku()</code>. Technicky má v paměti každá instance této „třídy“ lokální kopii této metody, což je přinejmenším z hlediska správy paměti nevhodné. Právě tento problém řeší prototypy, neboť stačí metodu deklarovat na úrovni prototypu a ta již nebude součástí každé instance. To ovšem neznamená, že nebude dosažitelná. Při vyhodnocování JavaScript hledá metodu nejprve v příslušném objektu, pakliže ji nenajde, jde o úroveň výše
<source lang="JavaScript">
// Definice konstruktoru
|