JavaScript: Porovnání verzí

Smazaný obsah Přidaný obsah
-{{pravopis; to je stranka tak nezajimava, ze na ni nikdo pul roku nesahl?!
M-sche (diskuse | příspěvky)
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&nbsp;proměnné funkcí vnějších existují po dobu existence funkce vnitřní, dokonce i&nbsp;po ukončení zavolání (tedy i&nbsp;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&nbsp;JavaScriptu nazývaný jako [[closure]]<nowiki/>s - uzávěry.
 
=== Prototypové (prototype-based) ===
Řádek 92:
Ačkoliv má JavaScript určité prvky dědičnosti, nejedná se o&nbsp;klasickou dědičnost známou z&nbsp;typových jazyků C++ nebo Java. JavaScript nepodporuje zápis tříd (pouze konstruktor) a&nbsp;s&nbsp;tím spojenou hierarchii tříd, proto lze hovořit spíše o&nbsp;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&nbsp;k&nbsp;funkci jako konstruktoru). Všechny objekty inicializované skrze nějaký konstruktor dědí, respektive sdílejí, vlastnosti a&nbsp;metody obsažené právě v&nbsp;prototypu daného konstruktoru.<br />
 
Podíváte-li se zpět na zápis konstruktoru <code>auto</code>, v&nbsp;objektu je vložená také metoda <code>vypisZnacku()</code>. Technicky má v&nbsp;paměti každá instance této „třídy“ lokální kopii této metody, což je přinejmenším z&nbsp;hlediska správy paměti nevhodné. Právě tento problém řeší prototypy, neboť stačí metodu deklarovat na úrovni prototypu a&nbsp;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&nbsp;příslušném objektu, pakliže ji nenajde, jde o&nbsp;úroveň výše - do prototypu konstruktoru. Samozřejmě je vhodné sdílení pouze takových datových složek, které jsou neměnné pro všechny instance. To znamená především metody a&nbsp;konstanty. Jak by vypadal upravený zápis předchozího příkladu můžete vidět níže:
<source lang="JavaScript">
// Definice konstruktoru