0:00:01.184,0:00:03.308 Teď, když už znáte[br]základy Javascriptu, 0:00:03.308,0:00:06.050 ukážu vám jeden skvělý [br]způsob, jak ho používat. 0:00:06.050,0:00:09.555 A tím způsobem je objektově[br]orientované programování. 0:00:09.555,0:00:12.156 Nejdříve musíme pochopit, [br]proč je to vlastně užitečné. 0:00:12.298,0:00:13.826 Takže mám tady program, 0:00:13.826,0:00:17.697 který by byl mnohem lepší,[br]kdyby byl objektově orientován. 0:00:17.697,0:00:19.967 Program jako takový[br]je docela dobrý. 0:00:19.967,0:00:21.429 Nahoře máme dvě proměnné, 0:00:21.429,0:00:25.165 které v sobě ukládají [br]jednoduché literály objektů. 0:00:25.323,0:00:28.560 Literál objektu je druh objektu, [br]se kterým jsme se už setkali. 0:00:28.560,0:00:30.680 Vytvoříme ho pomocí [br]dvou složených závorek, 0:00:30.680,0:00:33.762 do kterých pak vložíme všechny[br]názvy vlastností a hodnot. 0:00:33.762,0:00:36.875 Takže máme dvě proměnné [br]těchto objektových literálů. 0:00:36.875,0:00:41.036 A pak zde dole máme funkci drawWinston,[br]která očekává jenom jeden argument. 0:00:41.036,0:00:43.347 Nakonec vykreslí argument, 0:00:43.347,0:00:47.847 a to tak, že nakreslí obrázek na [br]základě x a y vlastností objektu. 0:00:47.847,0:00:52.900 Následuje titulek založený na [br]jménu a věku tohoto objektu. 0:00:52.900,0:00:55.538 Nakonec úplně dole[br]zavoláme drawWinston. 0:00:55.538,0:00:58.651 Nejprve na dospívajícího Winstona[br]a pak na dospělého Winstona. 0:00:58.651,0:01:00.862 A díky tomu se objeví. 0:01:02.092,0:01:06.587 Když teď půjdeme sem nahoru[br]a podíváme se na objektové literály, 0:01:06.587,0:01:08.568 možná si na nich něco všimnete. 0:01:08.568,0:01:11.188 Jde o to, že vypadají [br]opravdu podobně. 0:01:11.188,0:01:14.208 Oba mají stejné sady vlastností, 0:01:14.208,0:01:17.891 a oba mohou být ovládány pomocí [br]stejné funkce drawWinston. 0:01:17.891,0:01:20.362 Když nad tím zapřemýšlíte, 0:01:20.362,0:01:24.240 tak si uvědomíte, že oba [br]literály popisují typ Winstona. 0:01:24.240,0:01:28.840 Můžeme o tom přemýšlet jako o [br]abstraktním typu Winstona ve světě. 0:01:28.840,0:01:32.240 A každý Winston má [br]stejnou sadu vlastností. 0:01:32.240,0:01:36.381 Jako jméno, věk, x a y. 0:01:36.381,0:01:42.090 Takže jsme zde vlastně[br]vytvořili dvě instance Winstona, 0:01:42.090,0:01:45.001 které popisují konkrétního Winstona. 0:01:45.001,0:01:48.350 Těmi jsou dospívající Winston[br]a dospělý Winston. 0:01:48.350,0:01:54.894 Opravdu jsou si oba velmi podobní [br]a mají spustu věcí společných. 0:01:54.894,0:01:57.712 Pokud se zamyslíte, tak ve světě[br]to funguje velmi podobně. 0:01:57.712,0:02:01.341 Máme abstraktní datové [br]typy jako například lidé. 0:02:01.341,0:02:04.024 A my všichni jsme pak [br]konkrétní instancí těchto typů. 0:02:04.024,0:02:06.041 Ale máme naše [br]jedinečné vlastnosti. 0:02:06.041,0:02:10.362 Teď využijeme objektově[br]orientované techniky v Javascriptu. 0:02:10.362,0:02:17.921 Uděláme tyto proměnné Winstona[br]formálními instancemi objektu Winston. 0:02:17.921,0:02:21.963 Takže instance vědí, že [br]společně sdílejí určité věci. 0:02:21.963,0:02:25.091 Abychom to provedli,[br]potřebujeme jednu věc. 0:02:25.091,0:02:30.372 Popsat tento abstraktní datový[br]typ Winstona a udělat z něj proměnnou. 0:02:30.372,0:02:32.678 Datový typ uložíme do proměnné. 0:02:32.678,0:02:35.220 Takže napíšeme var Winston, [br]uděláme velké W, 0:02:35.220,0:02:38.630 protože vždy začínáme[br]naše typy objektů velkým písmenem, 0:02:38.630,0:02:41.810 a nastavíme to tak,[br]že se to rovná funkci. 0:02:41.810,0:02:46.950 Tato funkce je speciální funkce,[br]kterou nazýváme "konstruktor". 0:02:46.950,0:02:49.471 Protože se jedná o to, [br]co se volá pokaždé, 0:02:49.471,0:02:52.110 když chceme vytvořit novou [br]instanci Winstona. 0:02:52.110,0:02:55.629 Takže když chceme vytvořit dospívajícího[br]Winstona, volá se tato funkce. 0:02:55.629,0:02:58.217 A když chceme dospělého Winstona,[br]volá se funkce znovu. 0:02:58.217,0:03:03.037 To znamená, že tato funkce by [br]měla obsahovat všechny argumenty, 0:03:03.037,0:03:06.457 které potřebuje pro vytvoření[br]kompletního Winstona. 0:03:06.457,0:03:10.718 V tomto případě musí obsahovat[br]jméno, věk, x a y. 0:03:10.718,0:03:15.249 Jakmile máme tyto argumenty,[br]musíme s nimi něco udělat. 0:03:15.249,0:03:21.389 Musíme tyto informace [br]připojit k objektu Winston. 0:03:21.389,0:03:25.330 A k tomu použijeme speciální[br]klíčové slovo "this". 0:03:25.330,0:03:28.788 A "this" bude odkazovat[br]k aktuální instanci objektu. 0:03:28.788,0:03:31.800 Takže napíšeme this.nickname. 0:03:31.800,0:03:37.649 Název vlastnosti tohoto objektu [br]se rovná obsahu funkce konstruktoru. 0:03:38.451,0:03:41.851 A this.age se rovná věku,[br]který vložíme. 0:03:41.851,0:03:44.678 A this.x se rovná hodnotě x, [br]kterou vložíme. 0:03:44.678,0:03:47.466 A this.y se rovná y,[br]které vložíme. 0:03:47.466,0:03:52.838 Tak a teď máme tento abstraktní [br]datový typ s názvem Winston. 0:03:52.838,0:03:56.488 A má funkci konstruktoru, kterou[br]můžeme použít k vytvoření nového Winstona. 0:03:57.358,0:03:59.476 Zkusme to použít! 0:04:00.416,0:04:02.576 Budeme znovu vytvářet winstonTeen, 0:04:02.576,0:04:05.314 ale tentokrát napíšeme [br]winstonTeen se rovná. 0:04:05.314,0:04:10.363 A místo složených závorek[br]napíšeme rovná se "new Winston". 0:04:10.363,0:04:13.844 Tím říkáme, že zkoušíme [br]vytvořit novou instanci Winstona. 0:04:13.844,0:04:16.346 A pak vložíme informace, [br]které instance potřebuje. 0:04:16.346,0:04:21.478 Takže "Winsteen", "15", "20", "50". 0:04:22.246,0:04:27.360 Pak můžeme tento starý kód smazat,[br]protože ho už nepotřebujeme. 0:04:27.360,0:04:30.347 Takže teď jsme vytvořily [br]nového Winsteena. 0:04:31.207,0:04:35.960 Nyní můžeme napsat[br]winstonAdult = new Winston (). 0:04:35.960,0:04:40.082 A samozřejmě jeho jméno je [br]"Pane Winst-a-lot". 0:04:40.662,0:04:44.502 Je mu 30 let a nachází se [br]na pozicích 229 a 50. 0:04:44.502,0:04:50.712 Poté můžeme smazat tento literál[br]a náš kód bude pořád fungovat. 0:04:50.712,0:04:53.651 Co jsme udělali je to, [br]že jsme řekli, 0:04:53.651,0:04:57.851 že máme tento druh abstraktního[br]typu dat, což je tento Winston, 0:04:57.852,0:05:00.566 a můžeme vytvořit [br]nové instance Winstona, 0:05:00.566,0:05:05.161 které mají tyto vlastnosti, [br]které jsou pro ně jedinečné. 0:05:05.161,0:05:08.661 Tyto vlastnosti uvnitř[br]si budeme pamatovat. 0:05:08.661,0:05:10.644 Pamatování je opravdu důležité. 0:05:10.644,0:05:14.325 Takže tady máme:[br]this.nickname, this.age. 0:05:14.325,0:05:20.249 Pokud bychom náhodou this.age neměli,[br]konzole nám řekne "nedefinováno". 0:05:20.249,0:05:22.958 To proto, že tady dole,[br]tato funkce drawWinston, 0:05:22.958,0:05:28.220 očekává, že ať už dostane jakýkoli objekt,[br]očekává, že bude mít vlastnost "age". 0:05:28.220,0:05:32.023 A pokud jsme nenapsali this.age,[br]pak to tuto vlastnost nemá. 0:05:32.392,0:05:35.433 Předali jsme ji konstruktoru,[br]ale pak jsme s tím nic nedělali. 0:05:35.433,0:05:39.452 Musíme to k objektu připojit[br]pomocí klíčového slova "this". 0:05:39.621,0:05:41.542 Dáme to zpět. 0:05:41.542,0:05:46.401 Možná si říkáte, že[br]váš kód přece funguje, 0:05:46.401,0:05:50.457 ale de facto jsme udělali[br]to samé, co jsme měli předtím. 0:05:50.457,0:05:52.106 Ale je na tom [br]jedna skvělá věc. 0:05:52.106,0:05:56.173 Teď všichni naši Winstoni prochází[br]stejnou funkcí konstruktoru. 0:05:56.173,0:06:00.967 Takže pokud chceme, můžeme [br]o Winstonovi některé věci změnit. 0:06:00.967,0:06:02.917 O všech Winstonech,[br]a to tady uvnitř. 0:06:02.917,0:06:06.107 Takže možná chceme upravit věk a[br]připojit k němu na konec "yrs old". 0:06:06.107,0:06:09.838 Můžeme to prostě dát sem,[br]a tím se ke všem Winstonům připíše: 0:06:09.838,0:06:12.879 "15 let", "30 let" atd. 0:06:12.879,0:06:14.977 Takže tato část [br]o nich je jedinečná, 0:06:14.977,0:06:17.307 ale pak mají taky věci,[br]které jsou společné. 0:06:17.307,0:06:20.197 A skvělou věcí na objektově [br]orientovaném programování je to, 0:06:20.197,0:06:23.050 že na světě existuje[br]spousta druhů předmětů, 0:06:23.050,0:06:26.048 ze kterých můžete[br]vytvářet instance. 0:06:26.048,0:06:28.041 V některých věcech[br]jsou si velmi podobny. 0:06:28.041,0:06:29.810 Všechny mají řadu[br]stejných vlastnosti. 0:06:29.810,0:06:31.450 Pak jsou věci, [br]které jsou odlišné. 0:06:31.450,0:06:34.640 Jako například tato vlastnost,[br]která je ve skutečnosti jiná hodnota, 0:06:34.640,0:06:35.808 než tato jiná vlastnost. 0:06:35.808,0:06:40.508 Dále pak s nimi můžeme dělat[br]stejné věci, jako volat stejné funkce. 0:06:40.508,0:06:43.069 A používat je podobným způsobem. 0:06:43.069,0:06:46.459 To je jen několik skvělých věcí na [br]objektově orientovaném programování. 0:06:46.459,0:06:48.548 Ale jak uvidíte, [br]je toho mnohem víc! 0:06:48.548,0:06:50.148 Takže se máte na co těšit.