| CARVIEW |
JavaScript
Z Wikipedie, otevřené encyklopedie
JavaScript je multiplatformní, objektově orientovaný skriptovací jazyk, jehož autorem je Brendan Eich z tehdejší společnosti Netscape.
Nyní se zpravidla používá jako interpretovaný programovací jazyk pro WWW stránky, často vkládaný přímo do HTML kódu stránky. Jsou jím obvykle ovládány různé interaktivní prvky GUI (tlačítka, textová políčka) nebo tvořeny animace a efekty obrázků.
Jeho syntaxe patří do rodiny jazyků C/C++/Java. Slovo Java je však součástí jeho názvu pouze z marketingových důvodů a s programovacím jazykem Java jej vedle názvu spojuje jen podobná syntaxe. JavaScript byl v červenci 1997 standardizován asociací ECMA (Europen Computer Manufacturers Association) a v srpnu 1998 ISO (International Organization for Standardization). Standardizovaná verze JavaScriptu je pojmenována jako ECMAScript a z ní byly odvozeny i další implementace, jako je například ActionScript.
JavaScript byl původně obchodní název implementace společnosti Netscape, kde byl vyvíjen nejprve pod názvem Mocha, později LiveScript, ohlášen byl společně se společností Sun Microsystems v prosinci 1995 jako doplněk k jazykům HTML a Java. Pro verzi firmy Microsoft je použit název JScript. JScript je podporován platformou .NET.
Program v JavaScriptu se obvykle spouští až po stažení WWW stránky z Internetu (tzv. na straně klienta), na rozdíl od ostatních jiných interpretovaných programovacích jazyků (např. PHP a ASP), které se spouštějí na straně serveru ještě před stažením z Internetu. Z toho plynou jistá bezpečností omezení, JavaScript např. nemůže pracovat se soubory, aby tím neohrozil soukromí uživatele.
JavaScript je možné použít i na straně serveru. První implementací JavaScriptu na straně serveru byl LiveWire firmy Netscape vypuštěný roku 1996, dnes existuje několik možností včetně opensource implementace Rhinola založená na Rhino, gcj a Apache.
Kromě DHTML se JavaScript používá k psaní rozšíření pro mnohé aplikace, například Adobe Acrobat.
JavaScript je také možno spuštět v operačních systémech Windows pomocí programu Windows Script Host a nahradit tak dávkové soubory MS-DOS.
Obsah |
[editovat] Rysy objektově orientovaného programování
[editovat] Dynamické
[editovat] Dynamické přiřazení typů (Dynamic typing)
Stejně jako ve většině skriptovacích jazyků, jsou typy asociovány s hodnotami místo proměnných. Kupříkladu proměnné x může být přiřazena hodnota v podobě celočíselného typu, později řetězce atd. JavaScript pochopitelně podporuje řadu způsobů jak typ objektu otestovat.
[editovat] Objekty jako asociativní pole (objects as associative fields)
JavaScript je převážně objektově založený. Objekty jsou asociativními poli, rozšířenými o tzv. prototypy (viz níže). Názvy atributů objektů jsou klíči asociativního pole: obj.x = 10 a obj[“x“] = 10 jsou tedy ekvivalentními výrazy, první varianta používá oddělení pomocí znaku tečky především pro zjednodušující účely. Atributy a jejich hodnoty mohou být přidávány, měněny nebo mazány za běhu programu. Atributy objektu mohou být rovněž vyčteny pomocí for...in smyčky.
[editovat] Runtime evaluation (= míra možných akcí proveditelných za běhu programu)
Pro úplnost nutno zmínit, že JavaScript v sobě zahrnuje funkci eval, která je schopna provádět příkazy předávané jako řetězce přímo za běhu programu, což je však celkem běžným rysem interpretovaných jazyků, nejedná se tedy o žádnou specialitu JavaScriptu jako takového.
[editovat] Funkcionální
[editovat] Funkce první třídy (first-class functions)
Označení funkce první třídy vyjadřuje, že funkce jsou samy o sobě také objekty. Jako takové, mají tedy své atributy a mohou být předány dále, anebo s nimi lze manipulovat jako s kterýmkoli jiným objektem. Níže jsou uvedeny další významy funkcí (jako konstruktory a metody).
[editovat] Anonymní(vnitřní) funkce a uzávěry (closures)
Vnitř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í zvolá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 closures - uzávěry.
[editovat] Prototypové (prototype-based)
[editovat] Prototypy (Prototypes)
Přestože JavaScript nedisponuje klasickým konceptem třída-instance, typickým pro objektově orientované jazyky, disponuje rysem, který tento mechanismus částečně nahrazuje – prototypováním. Díky prototypování je dále JavaScript schopen simulovat mnoho principů a vlastností třídově založených (class-based) mechanismů, například dědičnost, která je u JavaScriptu nazývána právě jako dedičnost prototypová, která je vysvětlena na příkladu níže.
[editovat] Funkce jako konstruktory objektů (Functions as constructors)
Funkce tedy mají v JavaScriptu kromě své běžné role význam jako konstruktory objektů. Voláním konstruktoru pomocí operátoru new se pak vytvoří nový objekt (instance). Vlastnost objektu se deklaruje přes klíčové slovo this. Přímo při vytváření objektu lze tedy přejímáním parametrů volaného konstruktoru inicializovat jednotlivé proměnné. Atribut prototype dané funkce potom určuje prototyp nové vytvořeného objektu. Příklad konstruktoru třídy auto:
// Definice konstruktoru function auto(znacka, spz) { this.znacka = znacka; this.spz = spz; this.vypisZnacku = new Function("alert(this.znacka);");} //vytvoření nového auta moje_auto = new auto(“mercedes”, 3A4983);
[editovat] Funkce jako metody (Functions as methods)
Na rozdíl od většiny objektově orientovaných jazyků, u JavaScriptu nerozlišuje mezi definicí metody a definicí funkce. Znatelný rozdíl však vyvstane při zvolání – funkce může být zvolána jako metoda. Je-li funkce zvolána jako metoda objektu, je se svým objektem svázána klíčovým slovem this.
[editovat] Dědičnost (Inheritance)
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.
Podíváte-li se zpět na zápis konstruktoru auto, v objektu je vložená také metoda vypis(). 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 - 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 konstanty. Jak by vypadal upravený zápis předchozího příkladu můžete vidět níže:
// Definice konstruktoru function auto(znacka, spz) { this.znacka = znacka; this.spz = spz; } auto.prototype.vypisZnacku = new Function("alert(this.znacka);");
Systém dědičnosti nadřízených a podřízených tříd sice v JS neexistuje, ale pomocí prototypů ji lze úspěšně simulovat. Celý princip dědění spočívá v tvorbě nových prototypů. Máme-li třídu vesmirny_objekt, třídu planeta podřídíme tím, že přiřadíme konstruktoru planeta jako prototyp objekt vesmirny_objekt. Nevýhodou tohoto řešení je, že nelze inicializovat hodnoty v nadřazené třídě prostřednictvím parametrů:
function vesmirny_objekt() { this.soustava = "slunecni"; } function planeta(pocet) { this.pocet_mesicu = pocet } planeta.prototype = new vesmirny_objekt(); zeme = new planeta(3); alert(zeme.pocet_mesicu); alert(zeme.soustava);
[editovat] Výjimky (Exceptions)
Posledním rysem společným objektově orientovanými jazyky jsou výjimky. Jedná se o mechanismus zachytávání stavů, vyvolaných chybným kódem nebo, například, přístupem k neexistující metodě. Tyto chyby lze zachytávat pomocí klíčových slov try, catch a volitelně finally. Jejich syntaxe a popis je uvedena na příkladu níže. Při čtení následujícího kódu se zobrazí chybová hláška, nikoli však u prohlížečů znajících metodu document.implementation.
[editovat] Externí odkazy
- JavaScript: How Did We Get Here? – Historie vzniku jazyka (anglicky)
- Kniha JavaScript Kompletní průvodce, 2. aktualizované vydání – pravděpodobně nejlepší kniha o JavaScriptu
- Tisková zpráva Netscape a Sun Microsystems ohlašující JavaScript
- Do hlubin implementací JavaScriptu – Seriál na Zdrojak.cz
|
|||||||||||||||||||||||||||||
Osobní nástroje
Navigace
Tisk/export
V jiných jazycích
- Afrikaans
- العربية
- Žemaitėška
- Беларуская
- Беларуская (тарашкевіца)
- Български
- ᨅᨔ ᨕᨘᨁᨗ
- Català
- Dansk
- Deutsch
- Ελληνικά
- English
- Esperanto
- Español
- Eesti
- Euskara
- فارسی
- Suomi
- Français
- Galego
- עברית
- हिन्दी
- Hrvatski
- Magyar
- Interlingua
- Bahasa Indonesia
- Íslenska
- Italiano
- 日本語
- Basa Jawa
- ქართული
- ភាសាខ្មែរ
- 한국어
- Lietuvių
- Latviešu
- Македонски
- മലയാളം
- Монгол
- Bahasa Melayu
- Nederlands
- Norsk (bokmål)
- Polski
- Português
- Română
- Русский
- Саха тыла
- Simple English
- Slovenčina
- Slovenščina
- Shqip
- Српски / Srpski
- Svenska
- தமிழ்
- Тоҷикӣ
- ไทย
- Türkçe
- Українська
- Tiếng Việt
- 中文
- 粵語
- Stránka byla naposledy editována 10. 2. 2010 v 22:01.
- Text je dostupný pod licencí Creative Commons Uveďte autora – Zachovejte licenci 3.0 Unported, případně za dalších podmínek. Podrobnosti naleznete na stránce Podmínky užití.
- Ochrana osobních údajů
- O Wikipedii
- Vyloučení odpovědnosti