NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 3 - Třídy v TypeScriptu

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
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ý.

 
Odpovědět
29.6.2018 12:50
Avatar
Odpovídá 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.

 
Odpovědět
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.

 
Odpovědět
+1
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 :-)

 
Odpovědět
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 :-)

 
Odpovědět
18.6.2021 13:36
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.