Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyAlgoritmizace a programování Programování v JavaScriptu - II Funkce Volání funkcí

Logo Matematická biologie

Volání funkcí

U volání funkcí někdy bývají nejasnosti k jaké hodnotě se bude vázat funkční proměnná this. Existují čtyři způsoby volání funkcí.

Funkční volání
Prvním a asi nejjednodušším voláním je „funkční volání“ (funcion invocation pattern). Při funkčním volání je v this uložen tzv. „globální objekt“. Nejčastěji se jedná o objekt window (pokud javascript budete spouštět v okně prohlížeče).

function add(a, b) {
    return a + b;
}
alert(add(5, 3)); //8

Volání s operátorem new
Operátor new slouží, podobně jako v jiných jazycích, k vytváření objektů. Při přidání new před volání funkce se tak funkce stává tzv. „konstruktorem“, tedy metodou objektu, která inicializuje jeho stav. Jelikož v JavaScriptu neexistují třídy, všechno je řešeno pomocí prototypů. Takže při volání konstruktoru se vytvoří nový prázdný objekt, kterému se do prototypu zkopíruje prototyp volané funkce, a pak se již vykonává samotný konstruktor, kdy hodnotou proměnné this je ten nově vytvořený objekt.

var Cat = function (name) {
    this.name = name;
};

var my_cat = new Cat("lucy");

alert(my_cat);
alert(my_cat.name); // lucy

Volání jako metody objektu
Třetím případem volání může být takové, pokud máme nějaký objekt a pomocí tečkové notace (.) přistupujeme k jeho vlastnosti (objekt.vlastnost) a voláme ji jako metodu (objekt.vlastnost()). Proměnná this pak bude odkazovat na objekt, nad kterým je metoda volána (this === objekt), viz příklad:

Cat.prototype.sayMeow = function () {
    alert(this.name + " says meow!");
};

var my_cat = new Cat("lucy");
my_cat.sayMeow(); // lucy says meow!

Volání pomocí call() a apply()
Jak již bylo řečeno, funkce jsou vlastně objekty, takže na nich jdou také volat metody. Jedněmi z nich, zděděné z funkčního prototypu, jsou metody call() a apply(). Obě jsou si prakticky stejné – slouží k vyvolání funkce. První parametr obou funkcí je objekt, který bude přiřazen do this. Jediný rozdíl mezi oběma funkcemi je v tom, že při volání call() jsou parametry pro volanou funkci všechny parametry call() krom prvního (první parametr je this), zatímco apply() přijímá parametry v poli jako druhý argument.

add.call(null, 2, 3); // 5

add.apply(null, [2, 3]); // 5

Poznámka: Vzhledem k tomu, že data funkce jsou přiřazena do proměnné, platí stejná pravidla pro pojmenovávání funkcí, jako pro pojmenování proměnných-jméno funkce nesmí začínat číslem a může obsahovat libovolnou kombinaci písmen, čísel, a znak podtržítka. Jestliže nad proměnnou promenna zavoláte typeof výsledek bude slovo function. Na funkci se tedy můžeme dívat jako na zvláštní druh dat (proměnné), který nejen obsahuje kód funkce, ale umožňuje tento kód i spouštět.

 
vytvořil Institut biostatistiky a analýz Lékařské fakulty Masarykovy univerzity