[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:01.01,0:00:03.48,Default,,0000,0000,0000,,Wracamy do programu\Ntworzącego Winstonów. Dialogue: 0,0:00:03.58,0:00:06.34,Default,,0000,0000,0000,,Dodałam nowy typ obiektu: Hopper, Dialogue: 0,0:00:06.44,0:00:08.64,Default,,0000,0000,0000,,bo Hopper czuła się pominięta. Dialogue: 0,0:00:08.74,0:00:11.98,Default,,0000,0000,0000,,Definiuję ją tak samo jak Winstona. Dialogue: 0,0:00:12.08,0:00:14.21,Default,,0000,0000,0000,,Zaczynam od konstruktora, Dialogue: 0,0:00:14.31,0:00:16.93,Default,,0000,0000,0000,,potem są właściwości,\Nrysowanie i mówienie... Dialogue: 0,0:00:17.03,0:00:20.83,Default,,0000,0000,0000,,Dodałam też metodę „Hura!”, Dialogue: 0,0:00:20.93,0:00:25.22,Default,,0000,0000,0000,,bo Hopper bardzo lubi świętować.\NA Winston - wcale. Dialogue: 0,0:00:25.32,0:00:29.78,Default,,0000,0000,0000,,U dołu funkcji stworzyłam\Ndwa nowe obiekty „Hopper”: Dialogue: 0,0:00:29.88,0:00:32.97,Default,,0000,0000,0000,,Dużą i Małą. Narysowałam je. Dialogue: 0,0:00:33.07,0:00:36.54,Default,,0000,0000,0000,,Jednej przypisałam funkcję\Nmówienia, drugiej - „Hura”. Dialogue: 0,0:00:36.64,0:00:40.08,Default,,0000,0000,0000,,I dobrze. Patrząc\Nw ten fragment programu, Dialogue: 0,0:00:40.18,0:00:42.50,Default,,0000,0000,0000,,możecie zauważyć coś ciekawego. Dialogue: 0,0:00:42.60,0:00:47.16,Default,,0000,0000,0000,,Program dla Hopper\Njest podobny do tego dla Winstona. Dialogue: 0,0:00:47.26,0:00:49.13,Default,,0000,0000,0000,,Zwróćcie uwagę na konstruktora. Dialogue: 0,0:00:49.23,0:00:54.82,Default,,0000,0000,0000,,Może pamiętacie... To dokładnie\Nten sam program, co u Winstona. Dialogue: 0,0:00:54.92,0:01:00.19,Default,,0000,0000,0000,,I funkcja „talk” jest identyczna\Njak u niego. Dialogue: 0,0:01:01.04,0:01:04.31,Default,,0000,0000,0000,,Jedno i drugie ma funkcję „draw”. Dialogue: 0,0:01:04.41,0:01:07.18,Default,,0000,0000,0000,,Te dwa typy obiektów wiele łączy! Dialogue: 0,0:01:07.28,0:01:12.82,Default,,0000,0000,0000,,To ma sens, bo Hopper i Winston\Nsą podobnymi typami w naszym świecie. Dialogue: 0,0:01:12.92,0:01:17.07,Default,,0000,0000,0000,,Zresztą w prawdziwym świecie,\Npoza komputerem, Dialogue: 0,0:01:17.88,0:01:20.72,Default,,0000,0000,0000,,wiele typów obiektów\Nprzypomina inne. Dialogue: 0,0:01:20.82,0:01:22.73,Default,,0000,0000,0000,,Np. w królestwie zwierząt. Dialogue: 0,0:01:22.83,0:01:25.31,Default,,0000,0000,0000,,Wszystkie zwierzęta\Nsą do siebie podobne. Dialogue: 0,0:01:25.41,0:01:29.06,Default,,0000,0000,0000,,Ale są różne typy zwierząt,\Nnp. ludzie. Dialogue: 0,0:01:29.16,0:01:34.36,Default,,0000,0000,0000,,Ludzie są podobni do zwierząt,\Na także do siebie nawzajem. Dialogue: 0,0:01:34.46,0:01:37.92,Default,,0000,0000,0000,,Możemy więc powiedzieć,\Nże „zwierzę” to typ obiektu, Dialogue: 0,0:01:38.02,0:01:41.68,Default,,0000,0000,0000,,od którego typ obiektu „człowiek”\Ndziedziczy funkcjonalność. Dialogue: 0,0:01:41.78,0:01:43.56,Default,,0000,0000,0000,,Nie zaczynamy się z niczego; Dialogue: 0,0:01:43.66,0:01:46.72,Default,,0000,0000,0000,,dodajemy cechy do tych,\Nktóre mamy jako zwierzęta. Dialogue: 0,0:01:46.82,0:01:48.92,Default,,0000,0000,0000,,Wszystkie zwierzęta wydają odgłosy, Dialogue: 0,0:01:49.02,0:01:50.94,Default,,0000,0000,0000,,a ludzie dodatkowo mówią. Dialogue: 0,0:01:51.82,0:01:56.33,Default,,0000,0000,0000,,Pojęcie dziedziczenia obiektów\Nprzydaje się też w programowaniu. Dialogue: 0,0:01:56.43,0:02:00.65,Default,,0000,0000,0000,,W JavaScript możemy stworzyć\Nłańcuch dziedziczenia obiektów. Dialogue: 0,0:02:00.75,0:02:04.83,Default,,0000,0000,0000,,Zastanówmy się, co łączy\Nnasze typy obiektów. Dialogue: 0,0:02:04.93,0:02:06.64,Default,,0000,0000,0000,,I wymyślmy nazwę. Dialogue: 0,0:02:06.74,0:02:10.54,Default,,0000,0000,0000,,Stworzymy nowy typ obiektu,\Nreprezentujący obiekt bazowy. Dialogue: 0,0:02:10.64,0:02:13.56,Default,,0000,0000,0000,,Dajmy nazwę: „Creatures”\N(istoty). Bo nimi są. Dialogue: 0,0:02:13.66,0:02:16.09,Default,,0000,0000,0000,,Piszemy: „var creature =”... Dialogue: 0,0:02:16.19,0:02:17.98,Default,,0000,0000,0000,,Potrzebujemy konstruktora. Dialogue: 0,0:02:18.08,0:02:22.80,Default,,0000,0000,0000,,Ma go Hopper.\NTaki sam jest u Winstona. Dialogue: 0,0:02:22.90,0:02:25.17,Default,,0000,0000,0000,,W porządku? I teraz... Dialogue: 0,0:02:25.27,0:02:28.44,Default,,0000,0000,0000,,Zobaczmy... Teraz chcemy... Dialogue: 0,0:02:28.54,0:02:33.25,Default,,0000,0000,0000,,Co dalej? Może dodamy\Nfunkcję „talk”? Dialogue: 0,0:02:33.35,0:02:35.83,Default,,0000,0000,0000,,Zabierzemy ją. Dialogue: 0,0:02:35.93,0:02:39.82,Default,,0000,0000,0000,,Musi być w prototypie „creature”. Dialogue: 0,0:02:39.92,0:02:41.22,Default,,0000,0000,0000,,W porządku. Dialogue: 0,0:02:41.32,0:02:45.21,Default,,0000,0000,0000,,Mamy już typ obiektu „creature”. Dialogue: 0,0:02:45.31,0:02:48.20,Default,,0000,0000,0000,,Ale Hopper musi się dowiedzieć, Dialogue: 0,0:02:48.30,0:02:52.52,Default,,0000,0000,0000,,że ma na opierać swoje działanie\Nna „creature”. Dialogue: 0,0:02:52.62,0:02:55.59,Default,,0000,0000,0000,,Załatwimy to, pisząc ten wiersz. Dialogue: 0,0:02:55.69,0:02:58.86,Default,,0000,0000,0000,,Piszemy: „Hopper.prototype” Dialogue: 0,0:02:58.96,0:03:02.48,Default,,0000,0000,0000,,równa się „object.create” Dialogue: 0,0:03:02.58,0:03:04.84,Default,,0000,0000,0000,,„creature.prototype”. Dialogue: 0,0:03:04.94,0:03:07.100,Default,,0000,0000,0000,,Ten wiersz każe językowi JavaScript Dialogue: 0,0:03:08.10,0:03:12.12,Default,,0000,0000,0000,,oprzeć prototyp,\Nczyli funkcjonalność Hopper, Dialogue: 0,0:03:12.22,0:03:14.91,Default,,0000,0000,0000,,na prototypie „creature”. Dialogue: 0,0:03:15.01,0:03:19.97,Default,,0000,0000,0000,,Zawsze, gdy program szuka\Nfunkcji u Hopper, Dialogue: 0,0:03:20.07,0:03:22.96,Default,,0000,0000,0000,,najpierw spojrzy na prototyp. Dialogue: 0,0:03:23.06,0:03:26.66,Default,,0000,0000,0000,,A jeśli tam nie znajdzie,\Nto spojrzy na prototyp „creature”. Dialogue: 0,0:03:26.76,0:03:28.96,Default,,0000,0000,0000,,To nazywamy łańcuchem prototypów. Dialogue: 0,0:03:29.65,0:03:31.46,Default,,0000,0000,0000,,Po zrobieniu tego Dialogue: 0,0:03:31.56,0:03:35.16,Default,,0000,0000,0000,,powinno być możliwe skasowanie\Nfunkcji „talk” u Hopper. Dialogue: 0,0:03:35.26,0:03:37.45,Default,,0000,0000,0000,,Bo jest już w „creature”. Dialogue: 0,0:03:37.55,0:03:39.79,Default,,0000,0000,0000,,Wyżej w łańcuchu prototypów.\NSpróbujmy! Dialogue: 0,0:03:39.89,0:03:42.84,Default,,0000,0000,0000,,Gotowi? Udało się! Dialogue: 0,0:03:42.94,0:03:47.65,Default,,0000,0000,0000,,Bo program znalazł funkcję\Nw prototypie „creature”. Dialogue: 0,0:03:48.76,0:03:51.48,Default,,0000,0000,0000,,Spróbujmy skasować\Ntę funkcję u Winstona. Dialogue: 0,0:03:53.22,0:03:57.96,Default,,0000,0000,0000,,Nie udało się. Obiekt nie ma\Nmetody „talk”. Dialogue: 0,0:03:58.06,0:03:59.51,Default,,0000,0000,0000,,A dlaczego? Dialogue: 0,0:03:59.61,0:04:02.79,Default,,0000,0000,0000,,Są konstruktor i „draw”,\Na „talk” usunęliśmy. Dialogue: 0,0:04:02.89,0:04:06.58,Default,,0000,0000,0000,,Zapomnieliśmy powiedzieć\Nprototypowi Winstona, Dialogue: 0,0:04:06.68,0:04:10.11,Default,,0000,0000,0000,,że ma się opierać na prototypie\N„creature”. Ważny wiersz: Dialogue: 0,0:04:10.21,0:04:15.49,Default,,0000,0000,0000,,„Winston.prototype=object.create\Ncreature.portotype”. Dialogue: 0,0:04:17.100,0:04:21.04,Default,,0000,0000,0000,,Już! Zauważcie coś istotnego: Dialogue: 0,0:04:21.14,0:04:23.68,Default,,0000,0000,0000,,Ten wiersz jest po konstruktorze, Dialogue: 0,0:04:23.78,0:04:27.14,Default,,0000,0000,0000,,ale wpisuję go, zanim dodam coś\Ndo prototypu Winstona. Dialogue: 0,0:04:27.24,0:04:29.79,Default,,0000,0000,0000,,Zazwyczaj chcemy powiedzieć, Dialogue: 0,0:04:29.89,0:04:34.18,Default,,0000,0000,0000,,że na tym będzie się opierać\Npoczątkowy prototyp. Dialogue: 0,0:04:34.28,0:04:37.11,Default,,0000,0000,0000,,Możemy dodawać do prototypu\Nkolejne elementy. Dialogue: 0,0:04:37.21,0:04:40.78,Default,,0000,0000,0000,,Winston i Hopper mogą mieć\Ncharakterystyczne cechy, Dialogue: 0,0:04:40.88,0:04:45.21,Default,,0000,0000,0000,,których nie ma w „creatures”.\NSuper, że można je zdefiniować! Dialogue: 0,0:04:46.56,0:04:49.90,Default,,0000,0000,0000,,No dobrze. Widzimy\Npowtarzające się fragmenty. Dialogue: 0,0:04:50.00,0:04:51.33,Default,,0000,0000,0000,,To konstruktor. Dialogue: 0,0:04:51.43,0:04:53.92,Default,,0000,0000,0000,,Ten sam we wszystkich\Ntrzech przypadkach. Dialogue: 0,0:04:54.02,0:04:56.84,Default,,0000,0000,0000,,Czy możemy go skasować? Dialogue: 0,0:04:58.03,0:04:59.19,Default,,0000,0000,0000,,Spróbujmy. Dialogue: 0,0:05:01.00,0:05:03.58,Default,,0000,0000,0000,,Hmmm... Nie udało się. Dialogue: 0,0:05:03.68,0:05:07.73,Default,,0000,0000,0000,,Hopper pokazuje się w lewym górnym\Nrogu. Nie pamięta nic o sobie. Dialogue: 0,0:05:07.83,0:05:10.87,Default,,0000,0000,0000,,Bo JavaScript nie zakłada, Dialogue: 0,0:05:10.97,0:05:15.12,Default,,0000,0000,0000,,że chcemy tego samego konstruktora,\Nnawet gdy ma być w prototypie. Dialogue: 0,0:05:15.22,0:05:19.18,Default,,0000,0000,0000,,Pozwala nam zdefiniować\Nkonstruktora dla tych obiektów. Dialogue: 0,0:05:19.28,0:05:22.55,Default,,0000,0000,0000,,I daje łatwy sposób,\Nby przywołać Dialogue: 0,0:05:22.65,0:05:26.03,Default,,0000,0000,0000,,tę funkcję z obiektu. Dialogue: 0,0:05:26.13,0:05:29.00,Default,,0000,0000,0000,,Piszemy więc: „creature”... Dialogue: 0,0:05:29.10,0:05:30.19,Default,,0000,0000,0000,,kropka, „call”, Dialogue: 0,0:05:30.95,0:05:35.34,Default,,0000,0000,0000,,„this,nickname,age,x,y”. Dialogue: 0,0:05:35.74,0:05:36.50,Default,,0000,0000,0000,,Dobrze. Dialogue: 0,0:05:36.60,0:05:39.29,Default,,0000,0000,0000,,Program robi to\N(zauważcie - zadziałało!)... Dialogue: 0,0:05:39.39,0:05:44.61,Default,,0000,0000,0000,,przywołuje funkcję\N„creature”, konstruktora. Dialogue: 0,0:05:44.71,0:05:47.96,Default,,0000,0000,0000,,Przywołuje funkcję, ale mówi: Dialogue: 0,0:05:48.06,0:05:53.27,Default,,0000,0000,0000,,„przywołaj tę funkcję tak\Njak z obiektu Hopper, Dialogue: 0,0:05:54.06,0:05:56.74,Default,,0000,0000,0000,,jak z tymi argumentami”. Dialogue: 0,0:05:56.84,0:05:59.61,Default,,0000,0000,0000,,Tak została przywołana Hopper. Dialogue: 0,0:05:59.71,0:06:03.81,Default,,0000,0000,0000,,Program zostanie wykonany tak,\Njakby był tutaj. Dialogue: 0,0:06:03.91,0:06:05.48,Default,,0000,0000,0000,,I o to właśnie nam chodzi. Dialogue: 0,0:06:05.58,0:06:06.71,Default,,0000,0000,0000,,Udało się! Dialogue: 0,0:06:06.81,0:06:09.92,Default,,0000,0000,0000,,Możemy skopiować ten wiersz Dialogue: 0,0:06:10.02,0:06:13.68,Default,,0000,0000,0000,,także do konstruktora Winstona. Dialogue: 0,0:06:14.86,0:06:16.88,Default,,0000,0000,0000,,To działa. Tak! Dialogue: 0,0:06:16.98,0:06:19.02,Default,,0000,0000,0000,,Dobrze. Patrzcie: Dialogue: 0,0:06:19.12,0:06:21.99,Default,,0000,0000,0000,,zamknęliśmy wspólne właściwości\Ni funkcjonalność Dialogue: 0,0:06:22.09,0:06:24.66,Default,,0000,0000,0000,,w jednym typie obiektu bazowego,\N„creature”, Dialogue: 0,0:06:24.76,0:06:28.14,Default,,0000,0000,0000,,i na tej podstawie stworzyliśmy\Ndwa typy obiektów. Dialogue: 0,0:06:28.24,0:06:31.74,Default,,0000,0000,0000,,Dziedziczą funkcjonalność,\Nale dodają też własną. Dialogue: 0,0:06:31.84,0:06:36.27,Default,,0000,0000,0000,,Wystarczy zmienić tę funkcjonalność\Nw jednym miejscu. Dialogue: 0,0:06:36.37,0:06:40.87,Default,,0000,0000,0000,,Np. moglibyśmy zmienić wiek,\Npisząc: „plus lata”. Dialogue: 0,0:06:40.97,0:06:43.93,Default,,0000,0000,0000,,Teraz każdy ma na końcu „lata”. Dialogue: 0,0:06:44.03,0:06:48.21,Default,,0000,0000,0000,,Możemy też zmienić\Nfunkcje „talk”. „Super!”. Dialogue: 0,0:06:48.31,0:06:52.11,Default,,0000,0000,0000,,Teraz każdy Winston\Ni Hopper mówią: „Super!”. Dialogue: 0,0:06:52.90,0:06:56.59,Default,,0000,0000,0000,,Wiecie, jak tworzyć typy obiektów\Ni jak przebiega dziedziczenie. Dialogue: 0,0:06:56.69,0:07:00.10,Default,,0000,0000,0000,,Pomyślcie, jak to wykorzystać\Nw rysowaniu, animacjach, Dialogue: 0,0:07:00.20,0:07:01.42,Default,,0000,0000,0000,,symulacjach i grach. Dialogue: 0,0:07:01.52,0:07:04.56,Default,,0000,0000,0000,,Np. macie grę\Nz wieloma postaciami... Dialogue: 0,0:07:04.66,0:07:07.54,Default,,0000,0000,0000,,Wszystkie biegają,\Nale tylko niektóre skaczą. Dialogue: 0,0:07:07.64,0:07:11.59,Default,,0000,0000,0000,,Tu trzeba wykorzystać typy\Nobiektów i dziedziczenie! Dialogue: 0,0:07:11.69,0:07:15.30,Default,,0000,0000,0000,,Na pewno wymyślicie też\Nmnóstwo własnych zastosowań.