[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.98,0:00:03.62,Default,,0000,0000,0000,,Jsme zpět u našeho programu,\Nkterý vytváří Winstony. Dialogue: 0,0:00:03.62,0:00:06.34,Default,,0000,0000,0000,,Ale přidala jsem nový \Ntyp objektu a to Hoppera. Dialogue: 0,0:00:06.34,0:00:08.74,Default,,0000,0000,0000,,Protože Hopper se cítil\Ntrochu opomenutý. Dialogue: 0,0:00:08.74,0:00:11.92,Default,,0000,0000,0000,,Teď definuji Hoppera stejným \Nzpůsobem, jakým definuji Winstona. Dialogue: 0,0:00:11.92,0:00:15.39,Default,,0000,0000,0000,,Počínaje funkcí konstruktoru\Na stejnými vlastnostmi. Dialogue: 0,0:00:15.39,0:00:16.96,Default,,0000,0000,0000,,Máme zde draw a talk... Dialogue: 0,0:00:16.96,0:00:20.93,Default,,0000,0000,0000,,A pak jsem také přidala \Ndalší metodu zvanou Horray. Dialogue: 0,0:00:20.93,0:00:25.33,Default,,0000,0000,0000,,Protože Hoppeři opravdu rádi\Nslaví a Winstoni zase ne. Dialogue: 0,0:00:25.33,0:00:29.92,Default,,0000,0000,0000,,Ve spodní části funkce jsem \Nvytvořila dva nové objekty Hoppera: Dialogue: 0,0:00:29.92,0:00:31.52,Default,,0000,0000,0000,,Little Hoppera a Big Hoppera. Dialogue: 0,0:00:31.52,0:00:36.51,Default,,0000,0000,0000,,Nakreslila jsem je a na jednoho\Nzavolala "talk" a na druhého "hooray". Dialogue: 0,0:00:36.51,0:00:37.68,Default,,0000,0000,0000,,Je to celkem povedené. Dialogue: 0,0:00:37.68,0:00:42.65,Default,,0000,0000,0000,,Když se ale podíváte na horní část kódu,\Nmožná si všimnete něčeho zajímavého. Dialogue: 0,0:00:42.65,0:00:47.31,Default,,0000,0000,0000,,Kód pro Hoppera je velmi podobný\Nkódu pro Winstona. Dialogue: 0,0:00:47.31,0:00:49.46,Default,,0000,0000,0000,,Obzvláště se podívejte \Nna tento konstruktor. Dialogue: 0,0:00:49.46,0:00:50.84,Default,,0000,0000,0000,,Nevím, jestli si vzpomínáte, Dialogue: 0,0:00:50.84,0:00:54.86,Default,,0000,0000,0000,,ale tento kód vypadá úplně stejně\Njako kód pro konstruktor Winstona. Dialogue: 0,0:00:54.86,0:00:58.49,Default,,0000,0000,0000,,Tato funkce talk je taky\Ndefinována úplně stejným kódem, Dialogue: 0,0:00:58.49,0:01:00.51,Default,,0000,0000,0000,,jako funkce talk u Winstona. Dialogue: 0,0:01:02.00,0:01:03.90,Default,,0000,0000,0000,,Oba mají také funkci draw. Dialogue: 0,0:01:03.90,0:01:07.38,Default,,0000,0000,0000,,Tyto dva typy objektů mají\Ntedy hodně společného. Dialogue: 0,0:01:07.38,0:01:08.84,Default,,0000,0000,0000,,A dává to smysl, Dialogue: 0,0:01:08.84,0:01:13.30,Default,,0000,0000,0000,,protože Hopper a Winston jsou v našem\Nsvětě dva velmi podobné typy objektů. Dialogue: 0,0:01:13.30,0:01:17.88,Default,,0000,0000,0000,,A pokud uvažujete o skutečném světě,\No tom mimo počítač, Dialogue: 0,0:01:17.88,0:01:20.81,Default,,0000,0000,0000,,většina typů objektů sdílí podobné rysy\Ns jinými typy objektů. Dialogue: 0,0:01:20.81,0:01:22.45,Default,,0000,0000,0000,,Například zvířecí říše. Dialogue: 0,0:01:22.45,0:01:25.54,Default,,0000,0000,0000,,Všechna zvířata jsou \Nv některých ohledech podobná. Dialogue: 0,0:01:25.54,0:01:29.76,Default,,0000,0000,0000,,A pak máme různé typy\Nzvířat, jako například lidi. Dialogue: 0,0:01:29.76,0:01:34.30,Default,,0000,0000,0000,,Lidé hodně podobností sdílejí, ale také\Nmají své vlastní jedinečné podobnosti. Dialogue: 0,0:01:34.30,0:01:38.10,Default,,0000,0000,0000,,Takže bychom mohli říct, \Nže zvíře je typ objektu, Dialogue: 0,0:01:38.10,0:01:41.63,Default,,0000,0000,0000,,od kterého typ lidského objektu\Nzdědil určitou funkčnost. Dialogue: 0,0:01:41.63,0:01:43.63,Default,,0000,0000,0000,,Nezačíname úplně od nuly. Dialogue: 0,0:01:43.63,0:01:46.89,Default,,0000,0000,0000,,Přidáváme k funkcionalitě,\Nkterou máme jako zvíře. Dialogue: 0,0:01:46.89,0:01:51.80,Default,,0000,0000,0000,,Stejně jako všechna zvířata \Nvydávají zvuky, tak lidé mají řeč. Dialogue: 0,0:01:51.80,0:01:56.36,Default,,0000,0000,0000,,Koncept dědičnosti objektu\Nje opravdu užitečný při programování. Dialogue: 0,0:01:56.36,0:02:00.72,Default,,0000,0000,0000,,Můžeme dokonce vytvořit řetězec\Ndědičnosti objektů v našem Javascriptu. Dialogue: 0,0:02:00.72,0:02:05.04,Default,,0000,0000,0000,,Abychom to provedli, musíme zjistit,\Nco naše typy objektů spolu sdílejí. Dialogue: 0,0:02:05.04,0:02:06.88,Default,,0000,0000,0000,,A musíme pro to \Nvymyslet nějaký název. Dialogue: 0,0:02:06.88,0:02:09.06,Default,,0000,0000,0000,,Protože se chystáme vytvořit\Nnový typ objektu, Dialogue: 0,0:02:09.06,0:02:11.09,Default,,0000,0000,0000,,který představuje základní objekt. Dialogue: 0,0:02:11.09,0:02:12.64,Default,,0000,0000,0000,,Nazvěme je creatures (tvorové). Dialogue: 0,0:02:12.64,0:02:13.98,Default,,0000,0000,0000,,Oba jsou totiž tvory. Dialogue: 0,0:02:13.98,0:02:16.11,Default,,0000,0000,0000,,Takže napíšeme: \Nvar creature se rovná. Dialogue: 0,0:02:16.11,0:02:18.08,Default,,0000,0000,0000,,A nyní potřebujeme náš konstruktor. Dialogue: 0,0:02:18.08,0:02:19.64,Default,,0000,0000,0000,,Pojďme ho tedy ukrást Hopperovi, Dialogue: 0,0:02:19.64,0:02:23.41,Default,,0000,0000,0000,,protože je to to samé,\Nco má Winston. Dialogue: 0,0:02:26.54,0:02:29.39,Default,,0000,0000,0000,,Co chceme dělat dál? Dialogue: 0,0:02:29.39,0:02:32.99,Default,,0000,0000,0000,,Možná chceme přidat\Nfunkci "talk". Dialogue: 0,0:02:32.99,0:02:36.12,Default,,0000,0000,0000,,Funkci talk bychom mohli\Nukrást Hoppperovi. Dialogue: 0,0:02:36.12,0:02:39.69,Default,,0000,0000,0000,,Ale samozřejmě to musíme mít\Nv prototypu Creature. Dialogue: 0,0:02:41.21,0:02:45.54,Default,,0000,0000,0000,,Takže teď máme tento \Ntyp objektu Creature. Dialogue: 0,0:02:45.54,0:02:48.00,Default,,0000,0000,0000,,Ale ještě musíme Hopperovi říct, Dialogue: 0,0:02:48.00,0:02:52.39,Default,,0000,0000,0000,,že Hopper by vlastně měl zakládat \Nsvou funkčnost na základě Creature. Dialogue: 0,0:02:52.39,0:02:55.90,Default,,0000,0000,0000,,Můžeme to udělat napsáním\Ntohoto řádku zde. Dialogue: 0,0:02:55.90,0:03:04.75,Default,,0000,0000,0000,,Napíšeme: Hopper.prototype rovná \Nse object.create(creature.prototype); Dialogue: 0,0:03:04.75,0:03:09.57,Default,,0000,0000,0000,,Tento řádek říká, aby Javascript \Nzaložil Hopperův prototyp, Dialogue: 0,0:03:09.57,0:03:15.36,Default,,0000,0000,0000,,čili všechny jeho funkce,\Nna základě prototypu Creature. Dialogue: 0,0:03:15.36,0:03:19.86,Default,,0000,0000,0000,,To znamená, že pokaždé, \Nkdyž hledá funkci pro Hoppera, Dialogue: 0,0:03:19.86,0:03:23.78,Default,,0000,0000,0000,,podívá se nejprve na Hopperův \Nprototyp a pokud ho nenajde, Dialogue: 0,0:03:23.78,0:03:26.62,Default,,0000,0000,0000,,podívá se, zda je součástí\Nprototypu Creature. Dialogue: 0,0:03:26.62,0:03:29.50,Default,,0000,0000,0000,,A to je to, čemu říkáme\Nprototypový řetězec. Dialogue: 0,0:03:29.50,0:03:31.44,Default,,0000,0000,0000,,Jakmile máme toto hotovo, Dialogue: 0,0:03:31.44,0:03:35.59,Default,,0000,0000,0000,,měli bychom být schopni smazat \Nfunkci talk pro Hoppera, Dialogue: 0,0:03:35.59,0:03:37.60,Default,,0000,0000,0000,,protože ta již existuje\Nv rámci Creatura. Dialogue: 0,0:03:37.60,0:03:40.30,Default,,0000,0000,0000,,Je už v prototypovém řetězci, \Ntak to zkusíme. Dialogue: 0,0:03:42.20,0:03:47.70,Default,,0000,0000,0000,,Funguje to a to kvůli tomu,\Nže talk najdeme u prototypu Creature. Dialogue: 0,0:03:48.57,0:03:52.63,Default,,0000,0000,0000,,Zkusme to smazat \Ntaké u Winstona. Dialogue: 0,0:03:53.57,0:03:55.62,Default,,0000,0000,0000,,Nefungovalo to. Dialogue: 0,0:03:55.62,0:03:58.17,Default,,0000,0000,0000,,Máme hlášení, že objekt \Nnemá žádnou metodu talk. Dialogue: 0,0:03:58.17,0:03:59.43,Default,,0000,0000,0000,,Ale proč to tak je? Dialogue: 0,0:03:59.43,0:04:02.99,Default,,0000,0000,0000,,Máme náš konstruktor Winstona i\Nfunkci draw a jenom jsme odebrali talk. Dialogue: 0,0:04:02.99,0:04:06.30,Default,,0000,0000,0000,,Všimnete si, že jsme zapomněli\Nříci prototopu Winstona, Dialogue: 0,0:04:06.30,0:04:08.60,Default,,0000,0000,0000,,že má být založen na základě \Nprototypu Creature. Dialogue: 0,0:04:08.60,0:04:10.74,Default,,0000,0000,0000,,Potřebujeme tedy přidat \Nvelmi důležitý řádek: Dialogue: 0,0:04:10.74,0:04:15.96,Default,,0000,0000,0000,,Winston.prototype rovná se\NObject.create(Creature.prototype); Dialogue: 0,0:04:19.16,0:04:20.64,Default,,0000,0000,0000,,Všimněte si něčeho důležitého. Dialogue: 0,0:04:20.64,0:04:23.53,Default,,0000,0000,0000,,Tento řádek máme až po\Nfunkci konstruktoru, Dialogue: 0,0:04:23.53,0:04:27.04,Default,,0000,0000,0000,,ale předtím, než k prototypu Winstona\Npřidáme cokoli jiného. Dialogue: 0,0:04:27.04,0:04:29.05,Default,,0000,0000,0000,,Obvykle to chcete udělat tak, Dialogue: 0,0:04:29.05,0:04:33.95,Default,,0000,0000,0000,,že si nejdříve určíte,\Njaký prototyp bude výchozí. Dialogue: 0,0:04:33.95,0:04:36.97,Default,,0000,0000,0000,,Poté k prototypu\Npřidáváte další věci. Dialogue: 0,0:04:36.97,0:04:38.92,Default,,0000,0000,0000,,Protože by mohly \Nexistovat nějaké věci, Dialogue: 0,0:04:38.92,0:04:41.85,Default,,0000,0000,0000,,které jsou jedinečné pro Winstony \Nnebo jedinečné pro Hoppery. Dialogue: 0,0:04:41.85,0:04:43.16,Default,,0000,0000,0000,,Nejsou závislé na Creature. Dialogue: 0,0:04:43.16,0:04:46.61,Default,,0000,0000,0000,,A to je naprosto v pohodě,\Nmůžete je definovat. Dialogue: 0,0:04:46.61,0:04:50.20,Default,,0000,0000,0000,,Teď, když se na to podíváme,\Npořád se nám opakuje nějaký kód. Dialogue: 0,0:04:50.20,0:04:51.27,Default,,0000,0000,0000,,Kód konstruktoru. Dialogue: 0,0:04:51.27,0:04:54.63,Default,,0000,0000,0000,,Máme ho celkem třikrát. Dialogue: 0,0:04:54.63,0:05:00.62,Default,,0000,0000,0000,,Co kdybychom ho smazali,\Npojďme to zkusit. Dialogue: 0,0:05:00.62,0:05:03.25,Default,,0000,0000,0000,,Dobře, vypadá to,\Nže to takhle nepůjde. Dialogue: 0,0:05:03.25,0:05:05.37,Default,,0000,0000,0000,,Náš Hopper se objevil\Nv levém horním rohu. Dialogue: 0,0:05:05.37,0:05:08.42,Default,,0000,0000,0000,,A všechno o sobě zapomněl. Dialogue: 0,0:05:08.42,0:05:10.94,Default,,0000,0000,0000,,To se stalo kvůli tomu, \Nže Javascript nepředpokládá, Dialogue: 0,0:05:10.94,0:05:15.01,Default,,0000,0000,0000,,že chcete stejný konstruktor,\Ni když na něm chcete založit prototyp. Dialogue: 0,0:05:16.00,0:05:19.11,Default,,0000,0000,0000,,To vám umožní definovat svůj vlastní\Nkonstruktor pro tyto objekty. Dialogue: 0,0:05:19.11,0:05:26.17,Default,,0000,0000,0000,,Ale také vám to ulehčuje\Nvolání konstruktoru z podobjektu. Dialogue: 0,0:05:26.17,0:05:28.43,Default,,0000,0000,0000,,Způsob, jakým to můžeme udělat,\Nje, že napíšeme: Dialogue: 0,0:05:28.43,0:05:35.86,Default,,0000,0000,0000,,Creature.call(this, nickname, age, x, y); Dialogue: 0,0:05:36.62,0:05:47.44,Default,,0000,0000,0000,,Dělá to to, že se zavolá funkce Creature,\Nkonstrukční funkce, a řekne se: Dialogue: 0,0:05:47.44,0:05:53.60,Default,,0000,0000,0000,,Zavolejme si konstruktor funkce,\Ntak jako u objektu Hoppera. Dialogue: 0,0:05:53.95,0:05:56.78,Default,,0000,0000,0000,,A to přesně s těmi \Nsamými argumenty. Dialogue: 0,0:05:56.78,0:05:59.18,Default,,0000,0000,0000,,To jsou argumenty,\Nkteré používáme u Hoppera. Dialogue: 0,0:05:59.18,0:06:03.61,Default,,0000,0000,0000,,A tím se provede tento kód, \Njako by to bylo právě tady. Dialogue: 0,0:06:03.61,0:06:05.56,Default,,0000,0000,0000,,A přesně to chceme. Dialogue: 0,0:06:05.56,0:06:06.56,Default,,0000,0000,0000,,A fungovalo to. Dialogue: 0,0:06:06.56,0:06:13.81,Default,,0000,0000,0000,,Můžeme pokračovat a zkopírovat\Ntento řádek i do konstruktoru Winstona. Dialogue: 0,0:06:14.66,0:06:16.72,Default,,0000,0000,0000,,A funguje to. Dialogue: 0,0:06:17.82,0:06:18.81,Default,,0000,0000,0000,,Podívejte na to. Dialogue: 0,0:06:18.81,0:06:21.97,Default,,0000,0000,0000,,Shrnuli jsme všechny naše sdílené\Nvlastnosti a funkce o objektech, Dialogue: 0,0:06:21.97,0:06:24.65,Default,,0000,0000,0000,,do tohoto jediného a základního \Ntypu objektu: Creature. Dialogue: 0,0:06:24.65,0:06:28.66,Default,,0000,0000,0000,,A vytvořili jsme dva typy objektů, které\Njsou rozšířením tohoto základního objektu. Dialogue: 0,0:06:28.66,0:06:31.68,Default,,0000,0000,0000,,Zdědí nějakou funkčnost,\Nale také přidávají své vlastní. Dialogue: 0,0:06:31.68,0:06:33.06,Default,,0000,0000,0000,,A opravdu skvělé je to, Dialogue: 0,0:06:33.06,0:06:36.24,Default,,0000,0000,0000,,že můžeme změnit sdílenou\Nfunkčnost na jednom místě. Dialogue: 0,0:06:36.24,0:06:40.77,Default,,0000,0000,0000,,Kdybychom chtěli změnit věk,\Nstačilo by napsat: "+ years old". Dialogue: 0,0:06:40.77,0:06:43.94,Default,,0000,0000,0000,,Super, teď všichni mají\N"years old" na konci. Dialogue: 0,0:06:43.94,0:06:46.33,Default,,0000,0000,0000,,Nebo bychom mohli \Nzměnit funkci "talk". Dialogue: 0,0:06:49.23,0:06:53.07,Default,,0000,0000,0000,,A nyní Winstoni i Hoppeři\Nříkají "sup". Dialogue: 0,0:06:53.07,0:06:54.38,Default,,0000,0000,0000,,Takže teď jste viděli, Dialogue: 0,0:06:54.38,0:06:56.77,Default,,0000,0000,0000,,jak vytvářet typy objektů\Na jak typu objektu dědit. Dialogue: 0,0:06:56.77,0:06:58.16,Default,,0000,0000,0000,,Můžete začít přemýšlet o tom, Dialogue: 0,0:06:58.16,0:07:02.04,Default,,0000,0000,0000,,jak by to mohlo být užitečné ve vašich \Nkresbách, animacích, simulacích a hrách. Dialogue: 0,0:07:02.04,0:07:05.05,Default,,0000,0000,0000,,Můžete mít třeba hru, která\Nobsahuje mnoho typů postav. Dialogue: 0,0:07:05.05,0:07:07.83,Default,,0000,0000,0000,,Všechny mohou běžet,\Nale jen některé mohou skákat. Dialogue: 0,0:07:07.83,0:07:11.87,Default,,0000,0000,0000,,To je perfektní místo pro použití\Ntypů objektů a jejich dědičnosti. Dialogue: 0,0:07:11.87,0:07:15.79,Default,,0000,0000,0000,,Vsadím se, že dokáže přijít\Nna hodně dalších příkladů.