0:00:00.780,0:00:03.530 Już wiemy, jak stworzyć typ obiektu 0:00:03.630,0:00:06.339 i dwa obiekty winstonokształtne, 0:00:06.439,0:00:09.404 a potem uruchomić je konstruktorami. 0:00:09.504,0:00:13.537 Typ obiektu nie musi być[br]kojarzony z właściwościami. 0:00:13.637,0:00:16.114 Może mieć też funkcjonalność. 0:00:16.213,0:00:18.908 Pomyślcie o świecie[br]i typach obiektów w nim. 0:00:19.008,0:00:20.195 Weźmy np. ludzi. 0:00:20.295,0:00:22.360 Wszyscy mamy wzrost i wiek, 0:00:22.460,0:00:26.288 wykonujemy też czynności:[br]śpimy, jemy, programujemy. 0:00:26.388,0:00:29.001 Chcemy skojarzyć te funkcje 0:00:29.101,0:00:30.812 z typami obiektów. 0:00:30.912,0:00:34.481 Poprzedni odcinek skończyliśmy tak: 0:00:34.581,0:00:36.850 mamy funkcję „drawWinston”, 0:00:36.950,0:00:39.915 którą przywołujemy[br]przy obu obiektach „Winston”. 0:00:40.015,0:00:42.887 Czy nie byłoby świetnie[br]przyłączyć ją 0:00:42.987,0:00:45.480 do typu obiektu „Winston”? 0:00:45.580,0:00:48.018 Można to zrobić z łatwością. 0:00:48.626,0:00:52.398 Pod konstruktorem napiszemy:[br]„Winston”... 0:00:52.498,0:00:54.984 (wielkie „w”), „. prototype”. 0:00:55.670,0:00:59.019 Słowa „prototype” jeszcze[br]w programowaniu nie widzieliście. 0:00:59.119,0:01:03.553 To właściwość obiektu, 0:01:03.653,0:01:05.782 do której możemy dołączać funkcje. 0:01:05.882,0:01:09.816 A każda instancja tego obiektu 0:01:09.916,0:01:13.019 będzie powiązana z tymi funkcjami. 0:01:13.119,0:01:15.755 Piszemy „.prototype”,[br]potem jest kropka, 0:01:15.855,0:01:18.715 a po niej nazwa funkcji, np. „draw”. 0:01:19.481,0:01:22.924 Dalej znak równości i możemy wziąć 0:01:23.024,0:01:24.448 kod „drawWinston”, 0:01:24.548,0:01:27.473 który umieścimy tutaj. 0:01:28.554,0:01:32.786 Przypisaliśmy funkcję „draw” 0:01:32.886,0:01:34.807 do prototypu Winstona. 0:01:34.907,0:01:37.314 Możemy przywoływać funkcję „draw” 0:01:37.414,0:01:39.892 do każdego obiektu[br]typu Winstona. 0:01:39.992,0:01:44.489 Powinno to działać przy nastoletnim[br]i dorosłym Winstonie. 0:01:45.256,0:01:49.389 Funkcję, którą możemy[br]przywołać do obiektu, 0:01:49.489,0:01:51.270 nazywamy metodą. 0:01:51.370,0:01:53.731 Będę używać tego słowa. 0:01:54.636,0:01:57.980 To jest metoda rysowania.[br]W porządku. 0:01:58.080,0:02:01.045 Skasujemy to i to... 0:02:01.145,0:02:03.762 Spróbujmy przywołać „draw”. 0:02:03.862,0:02:05.643 Mamy: „winstonTeen.draw”. 0:02:06.827,0:02:09.746 Wyskoczył komunikat błędu. 0:02:09.846,0:02:13.974 „WinstObject niezdefiniowany”.[br]No dobrze. 0:02:14.513,0:02:18.344 Wcześniej wprowadzaliśmy[br]ten argument do „drawWinston”, 0:02:18.698,0:02:20.643 czyli do obiektu „Winston”. 0:02:20.743,0:02:22.802 Już tego nie robimy. 0:02:22.902,0:02:26.352 Możemy to zmienić, 0:02:26.452,0:02:28.445 i co tu wprowadzimy? 0:02:28.545,0:02:30.737 Trzeba dać „winstonTeen”. OK. 0:02:30.837,0:02:33.855 Udało się, ale to głupie. 0:02:33.955,0:02:37.617 Przywołuję funkcję „draw”[br]do obiektu, 0:02:38.482,0:02:41.889 więc nie powinnam dodatkowo[br]obiektu wprowadzać! 0:02:41.989,0:02:43.352 Dwa razy to samo! 0:02:43.840,0:02:45.790 Nie powinniśmy tego robić. 0:02:45.890,0:02:48.454 Skasujmy to więc i pomyślmy. 0:02:48.554,0:02:50.531 Gdy jesteśmy wewnątrz obiektu, 0:02:50.631,0:02:53.662 jak dostać się do jego właściwości? 0:02:54.248,0:02:56.401 Spójrzmy na konstruktora. 0:02:56.501,0:02:59.327 Przypomnijmy sobie[br]hasło „this”. Aha! 0:03:00.408,0:03:03.160 A gdybyśmy zmienili to w to? 0:03:04.482,0:03:07.408 Zmieniamy „winstObject”[br]w „this”. 0:03:08.493,0:03:10.709 Jesteśmy wewnątrz obiektu. 0:03:10.809,0:03:13.886 Ta funkcja łączy się z obiektem; 0:03:13.986,0:03:16.673 „this” odnosi się[br]do obiektu bieżącego. 0:03:16.829,0:03:19.081 Możemy więc napisać „this” 0:03:19.181,0:03:23.081 i zyskamy dostęp do wszystkich[br]właściwości bieżącego obiektu. 0:03:23.181,0:03:26.216 Udało się! Świetnie, prawda? 0:03:26.688,0:03:30.465 Teraz napiszmy:[br]„winstonAdult.draw”. 0:03:32.067,0:03:35.591 Jest! Mamy dostęp[br]do właściwości „winstonAdult”, 0:03:35.691,0:03:37.965 bo ten obiekt został przywołany. 0:03:38.065,0:03:40.752 To jest rewelacyjne w haśle „this”. 0:03:40.852,0:03:43.608 Chociaż czasami trudno je wymówić. 0:03:45.580,0:03:49.459 Było wesoło, więc dodajmy[br]kolejną metodę. 0:03:49.559,0:03:51.828 Co jeszcze może robić Winston? 0:03:51.928,0:03:53.569 Niech mówi. 0:03:53.669,0:03:56.366 Dajmy: „Winston.prototype.talk”. 0:03:56.466,0:04:00.280 Do prototypu możemy dodać[br]tyle metod, ile chcemy. 0:04:00.380,0:04:04.529 Napiszmy: „Jestem Winston!”. 0:04:05.368,0:04:08.755 A potem jeszcze: „this.x+20” 0:04:08.855,0:04:11.541 i „this.y+150”. 0:04:12.695,0:04:15.907 Nic się nie wydarzyło, 0:04:16.007,0:04:19.761 bo jeszcze nie przywołałam funkcji. 0:04:19.861,0:04:21.221 Niech nastolatek mówi. 0:04:21.322,0:04:24.428 „winstonTeen.talk”.[br]Gada cały czas. 0:04:24.528,0:04:29.614 „Jestem Winston!”.[br]A teraz niech mówi dorosły. 0:04:30.442,0:04:31.557 Hura! 0:04:32.085,0:04:35.342 Mamy teraz typ obiektu „Winston” 0:04:35.442,0:04:38.128 z właściwościami: nazwą,[br]wiekiem, „x” i „y”. 0:04:38.228,0:04:39.828 I jest funkcjonalny. 0:04:39.928,0:04:44.955 Zachowuje się różnie[br]w zależności od właściwości. 0:04:45.055,0:04:48.298 Możemy stworzyć tyle[br]instancji Winstona, ile chcemy, 0:04:48.398,0:04:51.015 i przywołać dowolną z metod. 0:04:51.181,0:04:52.617 Nieźle, co?