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.