IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 2. diel - Funkcie a triedy v TypeScriptu

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
Michal Žůrek - misaz:29.6.2018 12:50

Připomínky:

Klíčové slovo this obsahuje referenci na instanci objektu, ve kterém se zrovna nacházíme.

Nemusí být pravda. Následujíc ukázka bude volat v pravidelném intervalu metodu pozdrav a this v metodě pozdrav nebude obsahovat, to co by si tam čekal. Pokud kód poběží ve webovém prohlížeči, tak tam bude obsahovat objekt Window.

class Zdravic {

    private jmeno: string;

    constructor(jm: string) {
        this.jmeno = jm;
    }

    pozdrav() {
        console.log("Zdravím " + this.jmeno);
    }
}

var zdravic = new Zdravic("Frantu");
setInterval(zdravic.pozdrav, 1000);

Níže je vidět, že pokud se nyní pokusíme jméno zvířete vypsat mimo třídu Zvire, dostaneme chybu:

to ale dostaneme při kompilaci, za běhu by kód normálně proběhl protože TypeScript všechny členy z výkonových důvodů exportuje jako public. Hacknout si to s TypeScriptu lze docela snadno.

console.log((gazela as any).jmeno);

což se v exportovaném JS projeví jako

console.log(gazela.jmeno);

ale toto normálně nemá smyls dělat, rozbíjí to kód a porušujé dobré zvyky a zásady.

Jinak je článek dobrý.

 
Odpovedať
29.6.2018 12:50
Avatar
Odpovedá na Michal Žůrek - misaz
Tomáš "chlastyml" Kacálek:13.5.2019 15:56

Klíčové slovo this obsahuje referenci na instanci objektu, ve kterém se zrovna nacházíme.

Jasne, ale to co ty udelas v tom prikladu je, ze vytrhnes metodu z instance a pouzivas ji jako funkci.
To ne neco jako kdyby si udelal:

var zdravic = new Zdravic("Franta");
let pozdrav = zdravic.pozdrav;
pozdrav();
// setInterval(pozdrav, 1000);

Proste zrusis kontext te metody.
Ono tohle michani funkcionalniho a objektoveho paradigma je nekdy na palici. :D

1. reseni

var zdravic = new Zdravic("Franta");
setInterval(() => zdravic.pozdrav(), 1000);

Do setInterval predavam jako prvni argument fuknci, kde volam metodu na instanci.

2. reseni

var zdravic = new Zdravic("Franta");
setInterval(zdravic.pozdrav.bind(zdravic), 1000);

Tady predavam pozdrav jako samostatnou funkci, ke ktere binduju instanci zdravic.

 
Odpovedať
13.5.2019 15:56
Avatar
Robin Jancarik:19.10.2020 10:16

Ahoj, oprav si velke pismeno u Pepy ve vysledku, nekoho by to mohlo mast.
Z: pepa.houpejSe(); // Opicak pepa se houpe.
Na: pepa.houpejSe(); // Opicak Pepa se houpe.

 
Odpovedať
19.10.2020 10:16
Avatar
Honza
Člen
Avatar
Honza:16.6.2021 15:39

Vzhledem k následujícím cvičením k lekci 3 by bylo vhodné alespoň připomenout použití klíčového slova "super". Vím, v OOP k Javascriptu to je dostatečně vysvětleno, ale to je třeba "extends" taky :-)

 
Odpovedať
16.6.2021 15:39
Avatar
Honza
Člen
Avatar
Honza:18.6.2021 13:36

máme tři základní identifikátory. Jsou to tyto čtyři...
chybí zmínka o klíčovém slovu "super". Jinak ale super :-)

 
Odpovedať
18.6.2021 13:36
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!