-
Teď, když už znáte
základy Javascriptu,
-
ukážu vám jeden skvělý
způsob, jak ho používat.
-
A tím způsobem je objektově
orientované programování.
-
Nejdříve musíme pochopit,
proč je to vlastně užitečné.
-
Takže mám tady program,
-
který by byl mnohem lepší,
kdyby byl objektově orientován.
-
Program jako takový
je docela dobrý.
-
Nahoře máme dvě proměnné,
-
které v sobě ukládají
jednoduché literály objektů.
-
Literál objektu je druh objektu,
se kterým jsme se už setkali.
-
Vytvoříme ho pomocí
dvou složených závorek,
-
do kterých pak vložíme všechny
názvy vlastností a hodnot.
-
Takže máme dvě proměnné
těchto objektových literálů.
-
A pak zde dole máme funkci drawWinston,
která očekává jenom jeden argument.
-
Nakonec vykreslí argument,
-
a to tak, že nakreslí obrázek na
základě x a y vlastností objektu.
-
Následuje titulek založený na
jménu a věku tohoto objektu.
-
Nakonec úplně dole
zavoláme drawWinston.
-
Nejprve na dospívajícího Winstona
a pak na dospělého Winstona.
-
A díky tomu se objeví.
-
Když teď půjdeme sem nahoru
a podíváme se na objektové literály,
-
možná si na nich něco všimnete.
-
Jde o to, že vypadají
opravdu podobně.
-
Oba mají stejné sady vlastností,
-
a oba mohou být ovládány pomocí
stejné funkce drawWinston.
-
Když nad tím zapřemýšlíte,
-
tak si uvědomíte, že oba
literály popisují typ Winstona.
-
Můžeme o tom přemýšlet jako o
abstraktním typu Winstona ve světě.
-
A každý Winston má
stejnou sadu vlastností.
-
Jako jméno, věk, x a y.
-
Takže jsme zde vlastně
vytvořili dvě instance Winstona,
-
které popisují konkrétního Winstona.
-
Těmi jsou dospívající Winston
a dospělý Winston.
-
Opravdu jsou si oba velmi podobní
a mají spustu věcí společných.
-
Pokud se zamyslíte, tak ve světě
to funguje velmi podobně.
-
Máme abstraktní datové
typy jako například lidé.
-
A my všichni jsme pak
konkrétní instancí těchto typů.
-
Ale máme naše
jedinečné vlastnosti.
-
Teď využijeme objektově
orientované techniky v Javascriptu.
-
Uděláme tyto proměnné Winstona
formálními instancemi objektu Winston.
-
Takže instance vědí, že
společně sdílejí určité věci.
-
Abychom to provedli,
potřebujeme jednu věc.
-
Popsat tento abstraktní datový
typ Winstona a udělat z něj proměnnou.
-
Datový typ uložíme do proměnné.
-
Takže napíšeme var Winston,
uděláme velké W,
-
protože vždy začínáme
naše typy objektů velkým písmenem,
-
a nastavíme to tak,
že se to rovná funkci.
-
Tato funkce je speciální funkce,
kterou nazýváme "konstruktor".
-
Protože se jedná o to,
co se volá pokaždé,
-
když chceme vytvořit novou
instanci Winstona.
-
Takže když chceme vytvořit dospívajícího
Winstona, volá se tato funkce.
-
A když chceme dospělého Winstona,
volá se funkce znovu.
-
To znamená, že tato funkce by
měla obsahovat všechny argumenty,
-
které potřebuje pro vytvoření
kompletního Winstona.
-
V tomto případě musí obsahovat
jméno, věk, x a y.
-
Jakmile máme tyto argumenty,
musíme s nimi něco udělat.
-
Musíme tyto informace
připojit k objektu Winston.
-
A k tomu použijeme speciální
klíčové slovo "this".
-
A "this" bude odkazovat
k aktuální instanci objektu.
-
Takže napíšeme this.nickname.
-
Název vlastnosti tohoto objektu
se rovná obsahu funkce konstruktoru.
-
A this.age se rovná věku,
který vložíme.
-
A this.x se rovná hodnotě x,
kterou vložíme.
-
A this.y se rovná y,
které vložíme.
-
Tak a teď máme tento abstraktní
datový typ s názvem Winston.
-
A má funkci konstruktoru, kterou
můžeme použít k vytvoření nového Winstona.
-
Zkusme to použít!
-
Budeme znovu vytvářet winstonTeen,
-
ale tentokrát napíšeme
winstonTeen se rovná.
-
A místo složených závorek
napíšeme rovná se "new Winston".
-
Tím říkáme, že zkoušíme
vytvořit novou instanci Winstona.
-
A pak vložíme informace,
které instance potřebuje.
-
Takže "Winsteen", "15", "20", "50".
-
Pak můžeme tento starý kód smazat,
protože ho už nepotřebujeme.
-
Takže teď jsme vytvořily
nového Winsteena.
-
Nyní můžeme napsat
winstonAdult = new Winston ().
-
A samozřejmě jeho jméno je
"Pane Winst-a-lot".
-
Je mu 30 let a nachází se
na pozicích 229 a 50.
-
Poté můžeme smazat tento literál
a náš kód bude pořád fungovat.
-
Co jsme udělali je to,
že jsme řekli,
-
že máme tento druh abstraktního
typu dat, což je tento Winston,
-
a můžeme vytvořit
nové instance Winstona,
-
které mají tyto vlastnosti,
které jsou pro ně jedinečné.
-
Tyto vlastnosti uvnitř
si budeme pamatovat.
-
Pamatování je opravdu důležité.
-
Takže tady máme:
this.nickname, this.age.
-
Pokud bychom náhodou this.age neměli,
konzole nám řekne "nedefinováno".
-
To proto, že tady dole,
tato funkce drawWinston,
-
očekává, že ať už dostane jakýkoli objekt,
očekává, že bude mít vlastnost "age".
-
A pokud jsme nenapsali this.age,
pak to tuto vlastnost nemá.
-
Předali jsme ji konstruktoru,
ale pak jsme s tím nic nedělali.
-
Musíme to k objektu připojit
pomocí klíčového slova "this".
-
Dáme to zpět.
-
Možná si říkáte, že
váš kód přece funguje,
-
ale de facto jsme udělali
to samé, co jsme měli předtím.
-
Ale je na tom
jedna skvělá věc.
-
Teď všichni naši Winstoni prochází
stejnou funkcí konstruktoru.
-
Takže pokud chceme, můžeme
o Winstonovi některé věci změnit.
-
O všech Winstonech,
a to tady uvnitř.
-
Takže možná chceme upravit věk a
připojit k němu na konec "yrs old".
-
Můžeme to prostě dát sem,
a tím se ke všem Winstonům připíše:
-
"15 let", "30 let" atd.
-
Takže tato část
o nich je jedinečná,
-
ale pak mají taky věci,
které jsou společné.
-
A skvělou věcí na objektově
orientovaném programování je to,
-
že na světě existuje
spousta druhů předmětů,
-
ze kterých můžete
vytvářet instance.
-
V některých věcech
jsou si velmi podobny.
-
Všechny mají řadu
stejných vlastnosti.
-
Pak jsou věci,
které jsou odlišné.
-
Jako například tato vlastnost,
která je ve skutečnosti jiná hodnota,
-
než tato jiná vlastnost.
-
Dále pak s nimi můžeme dělat
stejné věci, jako volat stejné funkce.
-
A používat je podobným způsobem.
-
To je jen několik skvělých věcí na
objektově orientovaném programování.
-
Ale jak uvidíte,
je toho mnohem víc!
-
Takže se máte na co těšit.