< Return to Video

Objektová dědičnost

  • 0:01 - 0:04
    Jsme zpět u našeho programu,
    který vytváří Winstony.
  • 0:04 - 0:06
    Ale přidala jsem nový
    typ objektu a to Hoppera.
  • 0:06 - 0:09
    Protože Hopper se cítil
    trochu opomenutý.
  • 0:09 - 0:12
    Teď definuji Hoppera stejným
    způsobem, jakým definuji Winstona.
  • 0:12 - 0:15
    Počínaje funkcí konstruktoru
    a stejnými vlastnostmi.
  • 0:15 - 0:17
    Máme zde draw a talk...
  • 0:17 - 0:21
    A pak jsem také přidala
    další metodu zvanou Horray.
  • 0:21 - 0:25
    Protože Hoppeři opravdu rádi
    slaví a Winstoni zase ne.
  • 0:25 - 0:30
    Ve spodní části funkce jsem
    vytvořila dva nové objekty Hoppera:
  • 0:30 - 0:32
    Little Hoppera a Big Hoppera.
  • 0:32 - 0:37
    Nakreslila jsem je a na jednoho
    zavolala "talk" a na druhého "hooray".
  • 0:37 - 0:38
    Je to celkem povedené.
  • 0:38 - 0:43
    Když se ale podíváte na horní část kódu,
    možná si všimnete něčeho zajímavého.
  • 0:43 - 0:47
    Kód pro Hoppera je velmi podobný
    kódu pro Winstona.
  • 0:47 - 0:49
    Obzvláště se podívejte
    na tento konstruktor.
  • 0:49 - 0:51
    Nevím, jestli si vzpomínáte,
  • 0:51 - 0:55
    ale tento kód vypadá úplně stejně
    jako kód pro konstruktor Winstona.
  • 0:55 - 0:58
    Tato funkce talk je taky
    definována úplně stejným kódem,
  • 0:58 - 1:01
    jako funkce talk u Winstona.
  • 1:02 - 1:04
    Oba mají také funkci draw.
  • 1:04 - 1:07
    Tyto dva typy objektů mají
    tedy hodně společného.
  • 1:07 - 1:09
    A dává to smysl,
  • 1:09 - 1:13
    protože Hopper a Winston jsou v našem
    světě dva velmi podobné typy objektů.
  • 1:13 - 1:18
    A pokud uvažujete o skutečném světě,
    o tom mimo počítač,
  • 1:18 - 1:21
    většina typů objektů sdílí podobné rysy
    s jinými typy objektů.
  • 1:21 - 1:22
    Například zvířecí říše.
  • 1:22 - 1:26
    Všechna zvířata jsou
    v některých ohledech podobná.
  • 1:26 - 1:30
    A pak máme různé typy
    zvířat, jako například lidi.
  • 1:30 - 1:34
    Lidé hodně podobností sdílejí, ale také
    mají své vlastní jedinečné podobnosti.
  • 1:34 - 1:38
    Takže bychom mohli říct,
    že zvíře je typ objektu,
  • 1:38 - 1:42
    od kterého typ lidského objektu
    zdědil určitou funkčnost.
  • 1:42 - 1:44
    Nezačíname úplně od nuly.
  • 1:44 - 1:47
    Přidáváme k funkcionalitě,
    kterou máme jako zvíře.
  • 1:47 - 1:52
    Stejně jako všechna zvířata
    vydávají zvuky, tak lidé mají řeč.
  • 1:52 - 1:56
    Koncept dědičnosti objektu
    je opravdu užitečný při programování.
  • 1:56 - 2:01
    Můžeme dokonce vytvořit řetězec
    dědičnosti objektů v našem Javascriptu.
  • 2:01 - 2:05
    Abychom to provedli, musíme zjistit,
    co naše typy objektů spolu sdílejí.
  • 2:05 - 2:07
    A musíme pro to
    vymyslet nějaký název.
  • 2:07 - 2:09
    Protože se chystáme vytvořit
    nový typ objektu,
  • 2:09 - 2:11
    který představuje základní objekt.
  • 2:11 - 2:13
    Nazvěme je creatures (tvorové).
  • 2:13 - 2:14
    Oba jsou totiž tvory.
  • 2:14 - 2:16
    Takže napíšeme:
    var creature se rovná.
  • 2:16 - 2:18
    A nyní potřebujeme náš konstruktor.
  • 2:18 - 2:20
    Pojďme ho tedy ukrást Hopperovi,
  • 2:20 - 2:23
    protože je to to samé,
    co má Winston.
  • 2:27 - 2:29
    Co chceme dělat dál?
  • 2:29 - 2:33
    Možná chceme přidat
    funkci "talk".
  • 2:33 - 2:36
    Funkci talk bychom mohli
    ukrást Hoppperovi.
  • 2:36 - 2:40
    Ale samozřejmě to musíme mít
    v prototypu Creature.
  • 2:41 - 2:46
    Takže teď máme tento
    typ objektu Creature.
  • 2:46 - 2:48
    Ale ještě musíme Hopperovi říct,
  • 2:48 - 2:52
    že Hopper by vlastně měl zakládat
    svou funkčnost na základě Creature.
  • 2:52 - 2:56
    Můžeme to udělat napsáním
    tohoto řádku zde.
  • 2:56 - 3:05
    Napíšeme: Hopper.prototype rovná
    se object.create(creature.prototype);
  • 3:05 - 3:10
    Tento řádek říká, aby Javascript
    založil Hopperův prototyp,
  • 3:10 - 3:15
    čili všechny jeho funkce,
    na základě prototypu Creature.
  • 3:15 - 3:20
    To znamená, že pokaždé,
    když hledá funkci pro Hoppera,
  • 3:20 - 3:24
    podívá se nejprve na Hopperův
    prototyp a pokud ho nenajde,
  • 3:24 - 3:27
    podívá se, zda je součástí
    prototypu Creature.
  • 3:27 - 3:29
    A to je to, čemu říkáme
    prototypový řetězec.
  • 3:29 - 3:31
    Jakmile máme toto hotovo,
  • 3:31 - 3:36
    měli bychom být schopni smazat
    funkci talk pro Hoppera,
  • 3:36 - 3:38
    protože ta již existuje
    v rámci Creatura.
  • 3:38 - 3:40
    Je už v prototypovém řetězci,
    tak to zkusíme.
  • 3:42 - 3:48
    Funguje to a to kvůli tomu,
    že talk najdeme u prototypu Creature.
  • 3:49 - 3:53
    Zkusme to smazat
    také u Winstona.
  • 3:54 - 3:56
    Nefungovalo to.
  • 3:56 - 3:58
    Máme hlášení, že objekt
    nemá žádnou metodu talk.
  • 3:58 - 3:59
    Ale proč to tak je?
  • 3:59 - 4:03
    Máme náš konstruktor Winstona i
    funkci draw a jenom jsme odebrali talk.
  • 4:03 - 4:06
    Všimnete si, že jsme zapomněli
    říci prototopu Winstona,
  • 4:06 - 4:09
    že má být založen na základě
    prototypu Creature.
  • 4:09 - 4:11
    Potřebujeme tedy přidat
    velmi důležitý řádek:
  • 4:11 - 4:16
    Winston.prototype rovná se
    Object.create(Creature.prototype);
  • 4:19 - 4:21
    Všimněte si něčeho důležitého.
  • 4:21 - 4:24
    Tento řádek máme až po
    funkci konstruktoru,
  • 4:24 - 4:27
    ale předtím, než k prototypu Winstona
    přidáme cokoli jiného.
  • 4:27 - 4:29
    Obvykle to chcete udělat tak,
  • 4:29 - 4:34
    že si nejdříve určíte,
    jaký prototyp bude výchozí.
  • 4:34 - 4:37
    Poté k prototypu
    přidáváte další věci.
  • 4:37 - 4:39
    Protože by mohly
    existovat nějaké věci,
  • 4:39 - 4:42
    které jsou jedinečné pro Winstony
    nebo jedinečné pro Hoppery.
  • 4:42 - 4:43
    Nejsou závislé na Creature.
  • 4:43 - 4:47
    A to je naprosto v pohodě,
    můžete je definovat.
  • 4:47 - 4:50
    Teď, když se na to podíváme,
    pořád se nám opakuje nějaký kód.
  • 4:50 - 4:51
    Kód konstruktoru.
  • 4:51 - 4:55
    Máme ho celkem třikrát.
  • 4:55 - 5:01
    Co kdybychom ho smazali,
    pojďme to zkusit.
  • 5:01 - 5:03
    Dobře, vypadá to,
    že to takhle nepůjde.
  • 5:03 - 5:05
    Náš Hopper se objevil
    v levém horním rohu.
  • 5:05 - 5:08
    A všechno o sobě zapomněl.
  • 5:08 - 5:11
    To se stalo kvůli tomu,
    že Javascript nepředpokládá,
  • 5:11 - 5:15
    že chcete stejný konstruktor,
    i když na něm chcete založit prototyp.
  • 5:16 - 5:19
    To vám umožní definovat svůj vlastní
    konstruktor pro tyto objekty.
  • 5:19 - 5:26
    Ale také vám to ulehčuje
    volání konstruktoru z podobjektu.
  • 5:26 - 5:28
    Způsob, jakým to můžeme udělat,
    je, že napíšeme:
  • 5:28 - 5:36
    Creature.call(this, nickname, age, x, y);
  • 5:37 - 5:47
    Dělá to to, že se zavolá funkce Creature,
    konstrukční funkce, a řekne se:
  • 5:47 - 5:54
    Zavolejme si konstruktor funkce,
    tak jako u objektu Hoppera.
  • 5:54 - 5:57
    A to přesně s těmi
    samými argumenty.
  • 5:57 - 5:59
    To jsou argumenty,
    které používáme u Hoppera.
  • 5:59 - 6:04
    A tím se provede tento kód,
    jako by to bylo právě tady.
  • 6:04 - 6:06
    A přesně to chceme.
  • 6:06 - 6:07
    A fungovalo to.
  • 6:07 - 6:14
    Můžeme pokračovat a zkopírovat
    tento řádek i do konstruktoru Winstona.
  • 6:15 - 6:17
    A funguje to.
  • 6:18 - 6:19
    Podívejte na to.
  • 6:19 - 6:22
    Shrnuli jsme všechny naše sdílené
    vlastnosti a funkce o objektech,
  • 6:22 - 6:25
    do tohoto jediného a základního
    typu objektu: Creature.
  • 6:25 - 6:29
    A vytvořili jsme dva typy objektů, které
    jsou rozšířením tohoto základního objektu.
  • 6:29 - 6:32
    Zdědí nějakou funkčnost,
    ale také přidávají své vlastní.
  • 6:32 - 6:33
    A opravdu skvělé je to,
  • 6:33 - 6:36
    že můžeme změnit sdílenou
    funkčnost na jednom místě.
  • 6:36 - 6:41
    Kdybychom chtěli změnit věk,
    stačilo by napsat: "+ years old".
  • 6:41 - 6:44
    Super, teď všichni mají
    "years old" na konci.
  • 6:44 - 6:46
    Nebo bychom mohli
    změnit funkci "talk".
  • 6:49 - 6:53
    A nyní Winstoni i Hoppeři
    říkají "sup".
  • 6:53 - 6:54
    Takže teď jste viděli,
  • 6:54 - 6:57
    jak vytvářet typy objektů
    a jak typu objektu dědit.
  • 6:57 - 6:58
    Můžete začít přemýšlet o tom,
  • 6:58 - 7:02
    jak by to mohlo být užitečné ve vašich
    kresbách, animacích, simulacích a hrách.
  • 7:02 - 7:05
    Můžete mít třeba hru, která
    obsahuje mnoho typů postav.
  • 7:05 - 7:08
    Všechny mohou běžet,
    ale jen některé mohou skákat.
  • 7:08 - 7:12
    To je perfektní místo pro použití
    typů objektů a jejich dědičnosti.
  • 7:12 - 7:16
    Vsadím se, že dokáže přijít
    na hodně dalších příkladů.
Title:
Objektová dědičnost
Description:

Pamela ukazuje, jak objekty mohou zdědit a znovu použít kód jiných typů objektů.

more » « less
Video Language:
English
Duration:
07:17

Czech subtitles

Revisions