1 00:00:00,780 --> 00:00:03,530 Już wiemy, jak stworzyć typ obiektu 2 00:00:03,630 --> 00:00:06,339 i dwa obiekty winstonokształtne, 3 00:00:06,439 --> 00:00:09,404 a potem uruchomić je konstruktorami. 4 00:00:09,504 --> 00:00:13,537 Typ obiektu nie musi być kojarzony z właściwościami. 5 00:00:13,637 --> 00:00:16,114 Może mieć też funkcjonalność. 6 00:00:16,213 --> 00:00:18,908 Pomyślcie o świecie i typach obiektów w nim. 7 00:00:19,008 --> 00:00:20,195 Weźmy np. ludzi. 8 00:00:20,295 --> 00:00:22,360 Wszyscy mamy wzrost i wiek, 9 00:00:22,460 --> 00:00:26,288 wykonujemy też czynności: śpimy, jemy, programujemy. 10 00:00:26,388 --> 00:00:29,001 Chcemy skojarzyć te funkcje 11 00:00:29,101 --> 00:00:30,812 z typami obiektów. 12 00:00:30,912 --> 00:00:34,481 Poprzedni odcinek skończyliśmy tak: 13 00:00:34,581 --> 00:00:36,850 mamy funkcję „drawWinston”, 14 00:00:36,950 --> 00:00:39,915 którą przywołujemy przy obu obiektach „Winston”. 15 00:00:40,015 --> 00:00:42,887 Czy nie byłoby świetnie przyłączyć ją 16 00:00:42,987 --> 00:00:45,480 do typu obiektu „Winston”? 17 00:00:45,580 --> 00:00:48,018 Można to zrobić z łatwością. 18 00:00:48,626 --> 00:00:52,398 Pod konstruktorem napiszemy: „Winston”... 19 00:00:52,498 --> 00:00:54,984 (wielkie „w”), „. prototype”. 20 00:00:55,670 --> 00:00:59,019 Słowa „prototype” jeszcze w programowaniu nie widzieliście. 21 00:00:59,119 --> 00:01:03,553 To właściwość obiektu, 22 00:01:03,653 --> 00:01:05,782 do której możemy dołączać funkcje. 23 00:01:05,882 --> 00:01:09,816 A każda instancja tego obiektu 24 00:01:09,916 --> 00:01:13,019 będzie powiązana z tymi funkcjami. 25 00:01:13,119 --> 00:01:15,755 Piszemy „.prototype”, potem jest kropka, 26 00:01:15,855 --> 00:01:18,715 a po niej nazwa funkcji, np. „draw”. 27 00:01:19,481 --> 00:01:22,924 Dalej znak równości i możemy wziąć 28 00:01:23,024 --> 00:01:24,448 kod „drawWinston”, 29 00:01:24,548 --> 00:01:27,473 który umieścimy tutaj. 30 00:01:28,554 --> 00:01:32,786 Przypisaliśmy funkcję „draw” 31 00:01:32,886 --> 00:01:34,807 do prototypu Winstona. 32 00:01:34,907 --> 00:01:37,314 Możemy przywoływać funkcję „draw” 33 00:01:37,414 --> 00:01:39,892 do każdego obiektu typu Winstona. 34 00:01:39,992 --> 00:01:44,489 Powinno to działać przy nastoletnim i dorosłym Winstonie. 35 00:01:45,256 --> 00:01:49,389 Funkcję, którą możemy przywołać do obiektu, 36 00:01:49,489 --> 00:01:51,270 nazywamy metodą. 37 00:01:51,370 --> 00:01:53,731 Będę używać tego słowa. 38 00:01:54,636 --> 00:01:57,980 To jest metoda rysowania. W porządku. 39 00:01:58,080 --> 00:02:01,045 Skasujemy to i to... 40 00:02:01,145 --> 00:02:03,762 Spróbujmy przywołać „draw”. 41 00:02:03,862 --> 00:02:05,643 Mamy: „winstonTeen.draw”. 42 00:02:06,827 --> 00:02:09,746 Wyskoczył komunikat błędu. 43 00:02:09,846 --> 00:02:13,974 „WinstObject niezdefiniowany”. No dobrze. 44 00:02:14,513 --> 00:02:18,344 Wcześniej wprowadzaliśmy ten argument do „drawWinston”, 45 00:02:18,698 --> 00:02:20,643 czyli do obiektu „Winston”. 46 00:02:20,743 --> 00:02:22,802 Już tego nie robimy. 47 00:02:22,902 --> 00:02:26,352 Możemy to zmienić, 48 00:02:26,452 --> 00:02:28,445 i co tu wprowadzimy? 49 00:02:28,545 --> 00:02:30,737 Trzeba dać „winstonTeen”. OK. 50 00:02:30,837 --> 00:02:33,855 Udało się, ale to głupie. 51 00:02:33,955 --> 00:02:37,617 Przywołuję funkcję „draw” do obiektu, 52 00:02:38,482 --> 00:02:41,889 więc nie powinnam dodatkowo obiektu wprowadzać! 53 00:02:41,989 --> 00:02:43,352 Dwa razy to samo! 54 00:02:43,840 --> 00:02:45,790 Nie powinniśmy tego robić. 55 00:02:45,890 --> 00:02:48,454 Skasujmy to więc i pomyślmy. 56 00:02:48,554 --> 00:02:50,531 Gdy jesteśmy wewnątrz obiektu, 57 00:02:50,631 --> 00:02:53,662 jak dostać się do jego właściwości? 58 00:02:54,248 --> 00:02:56,401 Spójrzmy na konstruktora. 59 00:02:56,501 --> 00:02:59,327 Przypomnijmy sobie hasło „this”. Aha! 60 00:03:00,408 --> 00:03:03,160 A gdybyśmy zmienili to w to? 61 00:03:04,482 --> 00:03:07,408 Zmieniamy „winstObject” w „this”. 62 00:03:08,493 --> 00:03:10,709 Jesteśmy wewnątrz obiektu. 63 00:03:10,809 --> 00:03:13,886 Ta funkcja łączy się z obiektem; 64 00:03:13,986 --> 00:03:16,673 „this” odnosi się do obiektu bieżącego. 65 00:03:16,829 --> 00:03:19,081 Możemy więc napisać „this” 66 00:03:19,181 --> 00:03:23,081 i zyskamy dostęp do wszystkich właściwości bieżącego obiektu. 67 00:03:23,181 --> 00:03:26,216 Udało się! Świetnie, prawda? 68 00:03:26,688 --> 00:03:30,465 Teraz napiszmy: „winstonAdult.draw”. 69 00:03:32,067 --> 00:03:35,591 Jest! Mamy dostęp do właściwości „winstonAdult”, 70 00:03:35,691 --> 00:03:37,965 bo ten obiekt został przywołany. 71 00:03:38,065 --> 00:03:40,752 To jest rewelacyjne w haśle „this”. 72 00:03:40,852 --> 00:03:43,608 Chociaż czasami trudno je wymówić. 73 00:03:45,580 --> 00:03:49,459 Było wesoło, więc dodajmy kolejną metodę. 74 00:03:49,559 --> 00:03:51,828 Co jeszcze może robić Winston? 75 00:03:51,928 --> 00:03:53,569 Niech mówi. 76 00:03:53,669 --> 00:03:56,366 Dajmy: „Winston.prototype.talk”. 77 00:03:56,466 --> 00:04:00,280 Do prototypu możemy dodać tyle metod, ile chcemy. 78 00:04:00,380 --> 00:04:04,529 Napiszmy: „Jestem Winston!”. 79 00:04:05,368 --> 00:04:08,755 A potem jeszcze: „this.x+20” 80 00:04:08,855 --> 00:04:11,541 i „this.y+150”. 81 00:04:12,695 --> 00:04:15,907 Nic się nie wydarzyło, 82 00:04:16,007 --> 00:04:19,761 bo jeszcze nie przywołałam funkcji. 83 00:04:19,861 --> 00:04:21,221 Niech nastolatek mówi. 84 00:04:21,322 --> 00:04:24,428 „winstonTeen.talk”. Gada cały czas. 85 00:04:24,528 --> 00:04:29,614 „Jestem Winston!”. A teraz niech mówi dorosły. 86 00:04:30,442 --> 00:04:31,557 Hura! 87 00:04:32,085 --> 00:04:35,342 Mamy teraz typ obiektu „Winston” 88 00:04:35,442 --> 00:04:38,128 z właściwościami: nazwą, wiekiem, „x” i „y”. 89 00:04:38,228 --> 00:04:39,828 I jest funkcjonalny. 90 00:04:39,928 --> 00:04:44,955 Zachowuje się różnie w zależności od właściwości. 91 00:04:45,055 --> 00:04:48,298 Możemy stworzyć tyle instancji Winstona, ile chcemy, 92 00:04:48,398 --> 00:04:51,015 i przywołać dowolną z metod. 93 00:04:51,181 --> 00:04:52,617 Nieźle, co?