[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:01.18,0:00:03.31,Default,,0000,0000,0000,,Teď, když už znáte\Nzáklady Javascriptu, Dialogue: 0,0:00:03.31,0:00:06.05,Default,,0000,0000,0000,,ukážu vám jeden skvělý \Nzpůsob, jak ho používat. Dialogue: 0,0:00:06.05,0:00:09.56,Default,,0000,0000,0000,,A tím způsobem je objektově\Norientované programování. Dialogue: 0,0:00:09.56,0:00:12.16,Default,,0000,0000,0000,,Nejdříve musíme pochopit, \Nproč je to vlastně užitečné. Dialogue: 0,0:00:12.30,0:00:13.83,Default,,0000,0000,0000,,Takže mám tady program, Dialogue: 0,0:00:13.83,0:00:17.70,Default,,0000,0000,0000,,který by byl mnohem lepší,\Nkdyby byl objektově orientován. Dialogue: 0,0:00:17.70,0:00:19.97,Default,,0000,0000,0000,,Program jako takový\Nje docela dobrý. Dialogue: 0,0:00:19.97,0:00:21.43,Default,,0000,0000,0000,,Nahoře máme dvě proměnné, Dialogue: 0,0:00:21.43,0:00:25.16,Default,,0000,0000,0000,,které v sobě ukládají \Njednoduché literály objektů. Dialogue: 0,0:00:25.32,0:00:28.56,Default,,0000,0000,0000,,Literál objektu je druh objektu, \Nse kterým jsme se už setkali. Dialogue: 0,0:00:28.56,0:00:30.68,Default,,0000,0000,0000,,Vytvoříme ho pomocí \Ndvou složených závorek, Dialogue: 0,0:00:30.68,0:00:33.76,Default,,0000,0000,0000,,do kterých pak vložíme všechny\Nnázvy vlastností a hodnot. Dialogue: 0,0:00:33.76,0:00:36.88,Default,,0000,0000,0000,,Takže máme dvě proměnné \Ntěchto objektových literálů. Dialogue: 0,0:00:36.88,0:00:41.04,Default,,0000,0000,0000,,A pak zde dole máme funkci drawWinston,\Nkterá očekává jenom jeden argument. Dialogue: 0,0:00:41.04,0:00:43.35,Default,,0000,0000,0000,,Nakonec vykreslí argument, Dialogue: 0,0:00:43.35,0:00:47.85,Default,,0000,0000,0000,,a to tak, že nakreslí obrázek na \Nzákladě x a y vlastností objektu. Dialogue: 0,0:00:47.85,0:00:52.90,Default,,0000,0000,0000,,Následuje titulek založený na \Njménu a věku tohoto objektu. Dialogue: 0,0:00:52.90,0:00:55.54,Default,,0000,0000,0000,,Nakonec úplně dole\Nzavoláme drawWinston. Dialogue: 0,0:00:55.54,0:00:58.65,Default,,0000,0000,0000,,Nejprve na dospívajícího Winstona\Na pak na dospělého Winstona. Dialogue: 0,0:00:58.65,0:01:00.86,Default,,0000,0000,0000,,A díky tomu se objeví. Dialogue: 0,0:01:02.09,0:01:06.59,Default,,0000,0000,0000,,Když teď půjdeme sem nahoru\Na podíváme se na objektové literály, Dialogue: 0,0:01:06.59,0:01:08.57,Default,,0000,0000,0000,,možná si na nich něco všimnete. Dialogue: 0,0:01:08.57,0:01:11.19,Default,,0000,0000,0000,,Jde o to, že vypadají \Nopravdu podobně. Dialogue: 0,0:01:11.19,0:01:14.21,Default,,0000,0000,0000,,Oba mají stejné sady vlastností, Dialogue: 0,0:01:14.21,0:01:17.89,Default,,0000,0000,0000,,a oba mohou být ovládány pomocí \Nstejné funkce drawWinston. Dialogue: 0,0:01:17.89,0:01:20.36,Default,,0000,0000,0000,,Když nad tím zapřemýšlíte, Dialogue: 0,0:01:20.36,0:01:24.24,Default,,0000,0000,0000,,tak si uvědomíte, že oba \Nliterály popisují typ Winstona. Dialogue: 0,0:01:24.24,0:01:28.84,Default,,0000,0000,0000,,Můžeme o tom přemýšlet jako o \Nabstraktním typu Winstona ve světě. Dialogue: 0,0:01:28.84,0:01:32.24,Default,,0000,0000,0000,,A každý Winston má \Nstejnou sadu vlastností. Dialogue: 0,0:01:32.24,0:01:36.38,Default,,0000,0000,0000,,Jako jméno, věk, x a y. Dialogue: 0,0:01:36.38,0:01:42.09,Default,,0000,0000,0000,,Takže jsme zde vlastně\Nvytvořili dvě instance Winstona, Dialogue: 0,0:01:42.09,0:01:45.00,Default,,0000,0000,0000,,které popisují konkrétního Winstona. Dialogue: 0,0:01:45.00,0:01:48.35,Default,,0000,0000,0000,,Těmi jsou dospívající Winston\Na dospělý Winston. Dialogue: 0,0:01:48.35,0:01:54.89,Default,,0000,0000,0000,,Opravdu jsou si oba velmi podobní \Na mají spustu věcí společných. Dialogue: 0,0:01:54.89,0:01:57.71,Default,,0000,0000,0000,,Pokud se zamyslíte, tak ve světě\Nto funguje velmi podobně. Dialogue: 0,0:01:57.71,0:02:01.34,Default,,0000,0000,0000,,Máme abstraktní datové \Ntypy jako například lidé. Dialogue: 0,0:02:01.34,0:02:04.02,Default,,0000,0000,0000,,A my všichni jsme pak \Nkonkrétní instancí těchto typů. Dialogue: 0,0:02:04.02,0:02:06.04,Default,,0000,0000,0000,,Ale máme naše \Njedinečné vlastnosti. Dialogue: 0,0:02:06.04,0:02:10.36,Default,,0000,0000,0000,,Teď využijeme objektově\Norientované techniky v Javascriptu. Dialogue: 0,0:02:10.36,0:02:17.92,Default,,0000,0000,0000,,Uděláme tyto proměnné Winstona\Nformálními instancemi objektu Winston. Dialogue: 0,0:02:17.92,0:02:21.96,Default,,0000,0000,0000,,Takže instance vědí, že \Nspolečně sdílejí určité věci. Dialogue: 0,0:02:21.96,0:02:25.09,Default,,0000,0000,0000,,Abychom to provedli,\Npotřebujeme jednu věc. Dialogue: 0,0:02:25.09,0:02:30.37,Default,,0000,0000,0000,,Popsat tento abstraktní datový\Ntyp Winstona a udělat z něj proměnnou. Dialogue: 0,0:02:30.37,0:02:32.68,Default,,0000,0000,0000,,Datový typ uložíme do proměnné. Dialogue: 0,0:02:32.68,0:02:35.22,Default,,0000,0000,0000,,Takže napíšeme var Winston, \Nuděláme velké W, Dialogue: 0,0:02:35.22,0:02:38.63,Default,,0000,0000,0000,,protože vždy začínáme\Nnaše typy objektů velkým písmenem, Dialogue: 0,0:02:38.63,0:02:41.81,Default,,0000,0000,0000,,a nastavíme to tak,\Nže se to rovná funkci. Dialogue: 0,0:02:41.81,0:02:46.95,Default,,0000,0000,0000,,Tato funkce je speciální funkce,\Nkterou nazýváme "konstruktor". Dialogue: 0,0:02:46.95,0:02:49.47,Default,,0000,0000,0000,,Protože se jedná o to, \Nco se volá pokaždé, Dialogue: 0,0:02:49.47,0:02:52.11,Default,,0000,0000,0000,,když chceme vytvořit novou \Ninstanci Winstona. Dialogue: 0,0:02:52.11,0:02:55.63,Default,,0000,0000,0000,,Takže když chceme vytvořit dospívajícího\NWinstona, volá se tato funkce. Dialogue: 0,0:02:55.63,0:02:58.22,Default,,0000,0000,0000,,A když chceme dospělého Winstona,\Nvolá se funkce znovu. Dialogue: 0,0:02:58.22,0:03:03.04,Default,,0000,0000,0000,,To znamená, že tato funkce by \Nměla obsahovat všechny argumenty, Dialogue: 0,0:03:03.04,0:03:06.46,Default,,0000,0000,0000,,které potřebuje pro vytvoření\Nkompletního Winstona. Dialogue: 0,0:03:06.46,0:03:10.72,Default,,0000,0000,0000,,V tomto případě musí obsahovat\Njméno, věk, x a y. Dialogue: 0,0:03:10.72,0:03:15.25,Default,,0000,0000,0000,,Jakmile máme tyto argumenty,\Nmusíme s nimi něco udělat. Dialogue: 0,0:03:15.25,0:03:21.39,Default,,0000,0000,0000,,Musíme tyto informace \Npřipojit k objektu Winston. Dialogue: 0,0:03:21.39,0:03:25.33,Default,,0000,0000,0000,,A k tomu použijeme speciální\Nklíčové slovo "this". Dialogue: 0,0:03:25.33,0:03:28.79,Default,,0000,0000,0000,,A "this" bude odkazovat\Nk aktuální instanci objektu. Dialogue: 0,0:03:28.79,0:03:31.80,Default,,0000,0000,0000,,Takže napíšeme this.nickname. Dialogue: 0,0:03:31.80,0:03:37.65,Default,,0000,0000,0000,,Název vlastnosti tohoto objektu \Nse rovná obsahu funkce konstruktoru. Dialogue: 0,0:03:38.45,0:03:41.85,Default,,0000,0000,0000,,A this.age se rovná věku,\Nkterý vložíme. Dialogue: 0,0:03:41.85,0:03:44.68,Default,,0000,0000,0000,,A this.x se rovná hodnotě x, \Nkterou vložíme. Dialogue: 0,0:03:44.68,0:03:47.47,Default,,0000,0000,0000,,A this.y se rovná y,\Nkteré vložíme. Dialogue: 0,0:03:47.47,0:03:52.84,Default,,0000,0000,0000,,Tak a teď máme tento abstraktní \Ndatový typ s názvem Winston. Dialogue: 0,0:03:52.84,0:03:56.49,Default,,0000,0000,0000,,A má funkci konstruktoru, kterou\Nmůžeme použít k vytvoření nového Winstona. Dialogue: 0,0:03:57.36,0:03:59.48,Default,,0000,0000,0000,,Zkusme to použít! Dialogue: 0,0:04:00.42,0:04:02.58,Default,,0000,0000,0000,,Budeme znovu vytvářet winstonTeen, Dialogue: 0,0:04:02.58,0:04:05.31,Default,,0000,0000,0000,,ale tentokrát napíšeme \NwinstonTeen se rovná. Dialogue: 0,0:04:05.31,0:04:10.36,Default,,0000,0000,0000,,A místo složených závorek\Nnapíšeme rovná se "new Winston". Dialogue: 0,0:04:10.36,0:04:13.84,Default,,0000,0000,0000,,Tím říkáme, že zkoušíme \Nvytvořit novou instanci Winstona. Dialogue: 0,0:04:13.84,0:04:16.35,Default,,0000,0000,0000,,A pak vložíme informace, \Nkteré instance potřebuje. Dialogue: 0,0:04:16.35,0:04:21.48,Default,,0000,0000,0000,,Takže "Winsteen", "15", "20", "50". Dialogue: 0,0:04:22.25,0:04:27.36,Default,,0000,0000,0000,,Pak můžeme tento starý kód smazat,\Nprotože ho už nepotřebujeme. Dialogue: 0,0:04:27.36,0:04:30.35,Default,,0000,0000,0000,,Takže teď jsme vytvořily \Nnového Winsteena. Dialogue: 0,0:04:31.21,0:04:35.96,Default,,0000,0000,0000,,Nyní můžeme napsat\NwinstonAdult = new Winston (). Dialogue: 0,0:04:35.96,0:04:40.08,Default,,0000,0000,0000,,A samozřejmě jeho jméno je \N"Pane Winst-a-lot". Dialogue: 0,0:04:40.66,0:04:44.50,Default,,0000,0000,0000,,Je mu 30 let a nachází se \Nna pozicích 229 a 50. Dialogue: 0,0:04:44.50,0:04:50.71,Default,,0000,0000,0000,,Poté můžeme smazat tento literál\Na náš kód bude pořád fungovat. Dialogue: 0,0:04:50.71,0:04:53.65,Default,,0000,0000,0000,,Co jsme udělali je to, \Nže jsme řekli, Dialogue: 0,0:04:53.65,0:04:57.85,Default,,0000,0000,0000,,že máme tento druh abstraktního\Ntypu dat, což je tento Winston, Dialogue: 0,0:04:57.85,0:05:00.57,Default,,0000,0000,0000,,a můžeme vytvořit \Nnové instance Winstona, Dialogue: 0,0:05:00.57,0:05:05.16,Default,,0000,0000,0000,,které mají tyto vlastnosti, \Nkteré jsou pro ně jedinečné. Dialogue: 0,0:05:05.16,0:05:08.66,Default,,0000,0000,0000,,Tyto vlastnosti uvnitř\Nsi budeme pamatovat. Dialogue: 0,0:05:08.66,0:05:10.64,Default,,0000,0000,0000,,Pamatování je opravdu důležité. Dialogue: 0,0:05:10.64,0:05:14.32,Default,,0000,0000,0000,,Takže tady máme:\Nthis.nickname, this.age. Dialogue: 0,0:05:14.32,0:05:20.25,Default,,0000,0000,0000,,Pokud bychom náhodou this.age neměli,\Nkonzole nám řekne "nedefinováno". Dialogue: 0,0:05:20.25,0:05:22.96,Default,,0000,0000,0000,,To proto, že tady dole,\Ntato funkce drawWinston, Dialogue: 0,0:05:22.96,0:05:28.22,Default,,0000,0000,0000,,očekává, že ať už dostane jakýkoli objekt,\Nočekává, že bude mít vlastnost "age". Dialogue: 0,0:05:28.22,0:05:32.02,Default,,0000,0000,0000,,A pokud jsme nenapsali this.age,\Npak to tuto vlastnost nemá. Dialogue: 0,0:05:32.39,0:05:35.43,Default,,0000,0000,0000,,Předali jsme ji konstruktoru,\Nale pak jsme s tím nic nedělali. Dialogue: 0,0:05:35.43,0:05:39.45,Default,,0000,0000,0000,,Musíme to k objektu připojit\Npomocí klíčového slova "this". Dialogue: 0,0:05:39.62,0:05:41.54,Default,,0000,0000,0000,,Dáme to zpět. Dialogue: 0,0:05:41.54,0:05:46.40,Default,,0000,0000,0000,,Možná si říkáte, že\Nváš kód přece funguje, Dialogue: 0,0:05:46.40,0:05:50.46,Default,,0000,0000,0000,,ale de facto jsme udělali\Nto samé, co jsme měli předtím. Dialogue: 0,0:05:50.46,0:05:52.11,Default,,0000,0000,0000,,Ale je na tom \Njedna skvělá věc. Dialogue: 0,0:05:52.11,0:05:56.17,Default,,0000,0000,0000,,Teď všichni naši Winstoni prochází\Nstejnou funkcí konstruktoru. Dialogue: 0,0:05:56.17,0:06:00.97,Default,,0000,0000,0000,,Takže pokud chceme, můžeme \No Winstonovi některé věci změnit. Dialogue: 0,0:06:00.97,0:06:02.92,Default,,0000,0000,0000,,O všech Winstonech,\Na to tady uvnitř. Dialogue: 0,0:06:02.92,0:06:06.11,Default,,0000,0000,0000,,Takže možná chceme upravit věk a\Npřipojit k němu na konec "yrs old". Dialogue: 0,0:06:06.11,0:06:09.84,Default,,0000,0000,0000,,Můžeme to prostě dát sem,\Na tím se ke všem Winstonům připíše: Dialogue: 0,0:06:09.84,0:06:12.88,Default,,0000,0000,0000,,"15 let", "30 let" atd. Dialogue: 0,0:06:12.88,0:06:14.98,Default,,0000,0000,0000,,Takže tato část \No nich je jedinečná, Dialogue: 0,0:06:14.98,0:06:17.31,Default,,0000,0000,0000,,ale pak mají taky věci,\Nkteré jsou společné. Dialogue: 0,0:06:17.31,0:06:20.20,Default,,0000,0000,0000,,A skvělou věcí na objektově \Norientovaném programování je to, Dialogue: 0,0:06:20.20,0:06:23.05,Default,,0000,0000,0000,,že na světě existuje\Nspousta druhů předmětů, Dialogue: 0,0:06:23.05,0:06:26.05,Default,,0000,0000,0000,,ze kterých můžete\Nvytvářet instance. Dialogue: 0,0:06:26.05,0:06:28.04,Default,,0000,0000,0000,,V některých věcech\Njsou si velmi podobny. Dialogue: 0,0:06:28.04,0:06:29.81,Default,,0000,0000,0000,,Všechny mají řadu\Nstejných vlastnosti. Dialogue: 0,0:06:29.81,0:06:31.45,Default,,0000,0000,0000,,Pak jsou věci, \Nkteré jsou odlišné. Dialogue: 0,0:06:31.45,0:06:34.64,Default,,0000,0000,0000,,Jako například tato vlastnost,\Nkterá je ve skutečnosti jiná hodnota, Dialogue: 0,0:06:34.64,0:06:35.81,Default,,0000,0000,0000,,než tato jiná vlastnost. Dialogue: 0,0:06:35.81,0:06:40.51,Default,,0000,0000,0000,,Dále pak s nimi můžeme dělat\Nstejné věci, jako volat stejné funkce. Dialogue: 0,0:06:40.51,0:06:43.07,Default,,0000,0000,0000,,A používat je podobným způsobem. Dialogue: 0,0:06:43.07,0:06:46.46,Default,,0000,0000,0000,,To je jen několik skvělých věcí na \Nobjektově orientovaném programování. Dialogue: 0,0:06:46.46,0:06:48.55,Default,,0000,0000,0000,,Ale jak uvidíte, \Nje toho mnohem víc! Dialogue: 0,0:06:48.55,0:06:50.15,Default,,0000,0000,0000,,Takže se máte na co těšit.