< Return to Video

Metody objektů

  • 0:01 - 0:04
    V posledním videu jsme se naučili,
    jak vytvořit typ objektu,
  • 0:04 - 0:06
    který reprezentoval dva typu
    objektů podobných Winstonovi.
  • 0:06 - 0:09
    Potom jsme je inicializovali
    pomocí konstruktorů.
  • 0:09 - 0:13
    Typ objektu ale nemusí
    souviset pouze s vlastnostmi.
  • 0:13 - 0:16
    Může být také spojen
    s funkcionalitou.
  • 0:16 - 0:19
    Představte si svět a všechny
    typu objektů, které obsahuje.
  • 0:19 - 0:20
    Například my lidé.
  • 0:20 - 0:22
    Všichni máme výšku a věk,
  • 0:22 - 0:24
    ale také máme věci,
    které můžeme dělat,
  • 0:24 - 0:26
    jako třeba spát, jíst
    a programovat.
  • 0:26 - 0:31
    Chceme být schopni spojit
    tyto funkce s jejich typy objektů.
  • 0:31 - 0:34
    Tento program máme v bodě,
    kde jsme skončily minule.
  • 0:34 - 0:39
    Máme zde funkci drawWinston,
    kterou voláme na oba objekty Winstona.
  • 0:39 - 0:45
    Nebylo by hezké, kdybychom to mohli
    spojit s Winstonovým typem objektu?
  • 0:46 - 0:48
    Můžeme a je to celkem snadné.
  • 0:49 - 0:56
    Pod naším konstruktorem napíšeme
    "Winston" – velké W – tečka "prototype".
  • 0:56 - 0:59
    "Prototype" je nové slovo,
    které jste asi ještě neviděli.
  • 0:59 - 1:06
    Prototyp je vlastnost objektu,
    ke které můžeme připojit funkce.
  • 1:06 - 1:07
    To znamená,
  • 1:07 - 1:13
    že každý objekt, který je prototypem,
    bude obsahovat dané funkce.
  • 1:13 - 1:18
    Můžeme tedy napsat tečka "prototype"
    a poté tečka a název funkce.
  • 1:18 - 1:24
    Takže napíšeme "draw" rovná se
    a pak vezmeme náš kód z drawWinston,
  • 1:24 - 1:28
    který následně můžeme
    vložit sem dovnitř.
  • 1:29 - 1:34
    Takže právě jsme připojili funkci
    "draw" k našeme prototypu Winstona.
  • 1:35 - 1:36
    To znamená,
  • 1:36 - 1:40
    že bychom měli být schopni volat draw()
    u libovolného objektu typu Winston.
  • 1:40 - 1:45
    Měli být schopni zavolat draw()
    na winstonTeen nebo winstonAdult.
  • 1:45 - 1:50
    Když máme takovouto funkci,
    kterou můžeme zavolat na objektu,
  • 1:50 - 1:51
    nazýváme ji "method".
  • 1:51 - 1:54
    Takže mě teď budete slyšet,
    jak říkám "metoda".
  • 1:55 - 1:57
    Řekněme tedy, že se jedná
    o "draw method".
  • 1:58 - 2:01
    Tak a teď odstraníme tohle.
  • 2:01 - 2:05
    Zkusíme, jestli teď můžeme volat
    draw(), winstonTeen.draw()
  • 2:07 - 2:08
    A máme chybu.
  • 2:08 - 2:14
    Chybové hlášení nám říká,
    že "winstObject" není definován.
  • 2:14 - 2:18
    Předtím jsme vložili tento
    parametr do drawWinston,
  • 2:18 - 2:23
    což byl objekt typu Winston,
    ale teď už to nepředáváme.
  • 2:23 - 2:27
    Mohli bychom to změnit tak,
    abychom to předali.
  • 2:27 - 2:30
    To, co chceme předat,
    bude winstonTeen.
  • 2:30 - 2:34
    Teď to funguje, ale vypadá
    to opravdu nešikovně.
  • 2:34 - 2:38
    Již volám draw na
    samotném objektu.
  • 2:38 - 2:42
    Neměla bych vkládat
    znovu objekt jako takový.
  • 2:42 - 2:44
    To se zdá nadbytečné.
  • 2:44 - 2:46
    A je to pravda a neměli
    bychom to tak dělat.
  • 2:46 - 2:48
    Pojďme to smazat
    a zamyslet se.
  • 2:48 - 2:50
    Pokud jsme uvnitř objektu,
  • 2:50 - 2:54
    co bychom mohli použít pro
    přístup k vlastnostem objektu?
  • 2:54 - 2:56
    Když se podíváte na konstruktor,
  • 2:56 - 2:59
    možná si vybavíte speciální
    klíčové slovo "this".
  • 3:00 - 3:04
    Co kdybychom nahradili
    toto za "this"?
  • 3:04 - 3:08
    Takže změníme
    winstObject na "this".
  • 3:08 - 3:11
    Protože jsme teď uvnitř objektu,
  • 3:11 - 3:17
    tak je funkce vyhodnocena na objektu,
    takže "this" odkazuje na aktuální objekt.
  • 3:17 - 3:23
    Takže nám stačí napsat "this" a získáme
    přístup ke všem vlastnostem objektu.
  • 3:23 - 3:25
    A jak vidíte,
    funguje to!
  • 3:27 - 3:32
    Teď už nám stačí napsat
    winstonAdult.draw().
  • 3:32 - 3:35
    A bude to mít přístup k
    vlastnostem winstonAdult,
  • 3:35 - 3:38
    protože to je ten objekt,
    který se volá.
  • 3:38 - 3:41
    A to je důvod, proč je slovo
    "this" opravdu hodně dobré!
  • 3:41 - 3:44
    I když to může být trochu
    matoucí, když ho píšeme.
  • 3:46 - 3:49
    To byla spousta legrace,
    nyní přidejme další metodu.
  • 3:49 - 3:52
    Co dalšího by Winston
    mohl udělat?
  • 3:52 - 3:53
    Možná bude mluvit.
  • 3:53 - 3:56
    Takže uděláme
    Winston.prototype.talk.
  • 3:56 - 4:01
    Do prototypu můžeme připojit
    tolik metod, kolik chceme.
  • 4:01 - 4:05
    Napíšeme: "Jsem Winston!"
  • 4:05 - 4:13
    A pak napíšeme
    this.x+20 a this.y+150.
  • 4:15 - 4:16
    Nic se nestalo.
  • 4:16 - 4:20
    Ale to proto, že jsem tu
    funkci ještě nezavolala.
  • 4:20 - 4:24
    Pojďme si tedy promluvit,
    zavoláme winstonTeen.talk ().
  • 4:24 - 4:26
    "Jsem Winston!"
  • 4:26 - 4:30
    A pak napíšeme:
    winstonAdult.talk()
  • 4:32 - 4:38
    Teď máme tento objekt Winstona,
    který má vlastnosti: jméno, věk, x, y.
  • 4:38 - 4:41
    A má taky funkcionality
    jako chování a metody,
  • 4:41 - 4:44
    které fungují odlišně
    v závislosti na vlastnostech.
  • 4:45 - 4:48
    A můžeme vytvořit tolik instancí
    Winstona, kolik jen chceme.
  • 4:48 - 4:51
    A můžeme na ně zavolat
    kteroukoli z těchto metod.
  • 4:51 - 4:53
    Dost dobrý, že?
Title:
Metody objektů
Description:

Pamela ukazuje, jak k typům objektu připojit metody, které můžete následně volat na libovolnou instanci tohoto objektu.

more » « less
Video Language:
English
Duration:
04:54

Czech subtitles

Revisions