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!