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.