Znacie podstawy języka JavaScript.
Pokażę wam fajne zastosowanie.
Tzw. programowanie obiektowe.
Zacznijmy od tego,
czemu to jest przydatne.
Mam program, który ulepszymy
za pomocą obiektów.
Teraz też jest niezły!
Dwie zmienne, u góry,
przechowują literały.
Literał to obiekt, który już znamy:
w klamrach wpisujemy nazwy
właściwości oraz wartości.
Tu mamy dwie zmienne z literałami,
a tu - funkcję „drawWinston”,
przyjmującą jeden argument.
Funkcja rysuje obraz
z uwzględnieniem „x” i „y”
oraz właściwości obiektu;
wyświetla też podpis
z przydomkiem i wiekiem.
U dołu mamy funkcję „drawWinston”
dla wieku nastoletniego i dorosłego.
Dlatego pokazuje się obraz.
Super! Przyglądając się literałom,
zauważymy ich podobieństwo.
Mają te same właściwości
i w obu może działać
ta sama funkcja „drawWinston”.
Zastanówmy się:
każdy literał opisuje
jakiś rodzaj Winstona.
Jakby na świecie istniał
abstrakcyjny typ Winstona,
zatem każdy Winston
miałby te same właściwości
(przydomek, wiek,
współrzędne „x” i „y”)...
A my tu stworzyliśmy
tylko dwie instancje Winstona,
by opisać go
w szczególnej sytuacji.
Ten jest nastolatkiem,
a ten - dorosłym.
Są podobni do siebie.
Bardzo wiele ich łączy.
Tak zresztą działa świat.
Istnieją abstrakcyjne
typy danych, np. ludzie,
a każdy z nas jest instancją,
z własnymi cechami.
W JavaScript możemy używać
technik obiektowych,
żeby te zmienne z Winstonem
były instancjami obiektu „Winston”,
i wiedziały,
że mają wspólne cechy.
Aby tak było, musimy...
opisać ten abstrakcyjny
typ danych - „Winstona”.
W tym celu określimy zmienną,
by przechowywać w niej dane.
Piszę więc: „var Winston”,
przez wielkie „W”
(nazwy obiektów
zaczynamy od wielkiej litery).
I piszemy, że jest to równe funkcji.
To funkcja specjalna,
zwana konstruktorem.
Zostanie przywołana zawsze,
gdy będziemy chcieli
stworzyć nową instancję Winstona.
Chcąc stworzyć Winstona
nastoletniego
albo dorosłego,
przywołamy tę funkcję.
Będzie ona przyjmować
argumenty, których potrzebuje,
by stworzyć pełnego Winstona.
W tym przypadku to przydomek,
wiek, „x” i „y”.
Skoro przyjęliśmy te argumenty,
musimy coś z nimi zrobić.
Trzeba przypisać
te informacje do obiektu „Winston”.
Użyjemy nowego specjalnego
hasła, zwanego „this” (to).
Będzie się odnosić
do bieżącej instancji obiektu.
Napiszemy: „this.nickname”,
co będzie znaczyć, że właściwość
przydomka obiektu jest równa...
temu, co poda
funkcja konstruktor. OK?
A „this.age” jest równe
wprowadzonemu wiekowi;
„this.x” równa się
wprowadzonemu „x”, a „y”...
równa się wprowadzonemu „y”.
Mamy abstrakcyjny typ danych,
który nazwaliśmy Winstonem,
a z pomocą konstruktora
możemy stworzyć nowego Winstona.
Spróbujmy z tego skorzystać.
Znów robimy nastoletniego Winstona.
Powiemy, że jest on równy...
Zamiast wstawiać klamry,
powiemy, że jest równy
nowemu Winstonowi.
Czyli staramy się stworzyć
nową instancję Winstona.
Wprowadzamy potrzebne informacje:
„winstonTeen”,
15, 20, 50. W porządku?
Stary fragment możemy skasować.
Jest już niepotrzebny.
Stworzyliśmy nowego Winstona.
Powiemy, że Dorosły Winston
równa się Nowemu Winstonowi.
Nazywa się Pan Wygrany,
ładnie!
Ma 30 lat i znajduje się
na 229 i 50.
Możemy skasować literał.
Hura! Nasz program działa!
Powiedzieliśmy tutaj:
mamy abstrakcyjny
typ danych, Winstona,
i możemy tworzyć nowe instancje
z wyjątkowymi właściwościami.
Przypomnijmy sobie
właściwości w nich zawarte.
Trzeba o nich pamiętać.
Mamy tu „this.nickname”
i „this.age”.
Gdyby nie było „this.age”,
spójrzcie: wyskakuje „nieokreślone”.
Bo tutaj, wewnątrz
funkcji „drawWinston”,
każdy wprowadzony obiekt
powinien mieć właściwość wieku.
Gdybyśmy nie powiedzieli
„this.age”,
nie byłoby właściwości wieku.
Wpisaliśmy to do konstruktora
i nic nie zrobiliśmy.
Musimy przypisać wiek do obiektu
używając hasła „this”.
Dodajmy to z powrotem.
Pomyślicie: „Jasne, twój program
śmiga, robisz niezłe rzeczy...
ale to wszystko dałoby się
osiągnąć starymi metodami”.
Teraz będzie fajnie.
Każdy Winston przechodzi
przez tego samego konstruktora.
Gdybyśmy chcieli, możemy zmienić
to i owo o Winstonie.
O wszystkich Winstonach tutaj.
Przy wieku napiszemy „ile lat”.
Umieszczamy to tu
i każdy Winston mówi:
„15 lat”, „30 lat” itd.
To jego specyfika,
ale instancje mają też
cechy wspólne.
Świetne w programowaniu
obiektowym jest to...
że istnieją rodzaje obiektów,
a my możemy tworzyć
ich instancje.
Czasami są podobne,
np. mają te same własciwości,
ale są też różnice, np. „ta właściwość
przybiera inną wartość niż ta druga”.
Możemy jednak zrobić to samo,
przywołać te same funkcje
i użyć ich w podobny sposób.
To są zalety
programowania obiektowego,
ale zobaczycie: można więcej!
Oglądajcie dalej!