Moduly v JavaScriptu

Pro využívání JS na stránce není nutné vymýšlet nějaké třídy, dokonce ani funkce.

Nejjednodušší příkazy je možné psát přímo do atributů událostí (onmouseover, onclick, onsubmit a podobně).

<button onclick='alert("test")'>Tlačítko</button>

Nebo přímo do stránky do značky <script> (případně do externího JS):

<script>
  alert("test");
</script>

Při složitějších skriptech začne dávat smysl používat funkce. Kromě řešení opakujícího se kódu to má tu výhodu, že funkce vytvoří nový scope, což ohraničí kód funkce před „narušením z venku“ a naopak. Nestane se potom, že by si různé řádky nesouvisejících skriptů třeba přepisovaly proměnné (více o scope v samostatném článku).

function funkce(parametr) {
  var hlaska = "Vypisuji: " + parametr;
  alert(hlaska);
}

Pokud by byla deklarována proměnná hlaska mimo funkci, nebude tato proměnná (mimo funkci) přepsána (ukázka).

var hlaska = "Ahoj";
function funkce() {
  var hlaska = "Dobrý den"; 
}
funkce();
// Vypíše "Ahoj"
alert(hlaska);

Takto je možné stavět i rozsáhlé věci — zkrátka se připojí jeden JS soubor plný funkcí a ty se různé volají. Pro přehlednost se související funkce mohou rozdělit do zvláštních *.js souborů (a pro rychlejší načítání automaticky opět sloučit do jednoho).

Nevýhoda tohoto postupu je v tom, že všechny nesouvisející funkce jsou v jednom scope. A pokud by nějaké související funkce chtěly sdílet společné proměnné, mohou opět kolidovat s funkcemi nesouvisejícími a jejich proměnnými.

Moduly

Řešením je související kód obalit do společného scope a utvořit tzv. modul.

Příklad jednoduchého modulu je následující kód pro vložení textu do HTML odstavce.

var Modul = {
  slovo : "vypisuji",
  funkce : function(parametr) {
    document.getElementById("vypis").innerHTML += this.veta + " " + parametr + " ";
  }
}
  1. V rámci modulu existuje proměnná slovo a funkce funkce.
  2. V rámci modulu se k proměnným/funkcím dá dostat přes:
    • Název modulu a vlastnost — Modul.slovo
    • Nebo využít klíčové slovo thisthis.slovo

Z kódu mimo tento modul se dostaneme ke všem vlastnostem (těm položkám vlevo od dvojtečky) pochopitelně jen přes uvedení názvu modulu.

<button onclick="Modul.funkce('parametr')">Tlačítko</button>

Živá ukázka

Jiný způsob

Docílit podobného výsledku je možné i jiným postupem — obalením souvisejících funkcí do další funkce, která funkce, které se využívají zvnějšku, vrátí pomocí příkazu return.

Zároveň se tato obalová funkce rovnou zavolá (to ty závorky () za uzavírací „}“), aby se výše uvedené provedlo.

var Modul = function() {
  var slovo = "vypisuji";
  var funkce = function(parametr) {
    document.getElementById("vypis").innerHTML += slovo + " " + parametr + " ";
  }
  return {funkce: funkce};
}();

Tento kód dělá to samé, co dříve uvedený, s tím rozdílem, že se nepůjde dostat k Modul.slovo (ven se vrací jen funkce funkce).

Živá ukázka.

Výhoda tohoto postupu je v tom, že kvůli nutnosti returnovat obsah přístupný zvenčí, je ihned patrné, jak se modul používá. Proto je vhodné vracet opravdu jen to, co se dál využívá. Zároveň není možné manipulovat s modulem zvenčí způsobem, který nebyl zamýšlen.

Další výhoda je snazší překlopení původního kód v prostých funkcí do podoby modulů.

Různý zápis funkcí

Poznámka: Následující zápis funkce.

var funkce = function(parametr) {
  // něco
}

Je v podstatě shodný s původním zápisem:

function funkce(parametr) {
  // něco
}

Pan e doplnil rozdíl, který mezi těmito zápisy panuje. V případě vytváření funkcí přes var funkce = function(){} bude tato funkce dostupná až pod jejím vytvořením. V případě, že bychom ji volali v kódu výše, bude undefined.

funkce(); // undefined
var funkce = function() {
  alert("F");
}
funkce(); // alert(F)

Druhů způsob s tímto problém nemá. Ukázka.

To je všechno. Líbil se vám článek a chcete se dozvědět, až vyjde další?

Sledujte:

 

Připomínky mi pište do komentářů ↓

Jak vytvořit WYSIWYG editor

Vlastní jednoduchý WYSIWYG editor

Chceme-li na webu zadávat text a běžná <textarea> už nestačí, řešením je napsat si vlastní WYSIWYG editor.

Detekce zapnutého JavaScriptu

Zapnutý a vypnutý JavaScript

Jak na webové stránce detekovat zapnuté nebo vypnuté skriptování.

CSS vyhledávání a filtrování

CSS vyhledávání a filtrování obsahu

Jak pomocí CSS se špetkou JS filtrovat obsah stránky nebo na ní vyhledávat.

Plynulý přesun focusu

Plynulý přesun focusu

Plynulé přesouvání focusu mezi jednotlivými položkami formuláře.

Označení textu kliknutím

Označení kódu nebo textu po kliknutí

Jak označit text nebo zdrojový kód jedním kliknutím. Je to vůbec rozumné?

Komentáře