Nowy Standard JavaScript
10 godz. 43 min · JavaScript · Full-stack i Programowanie
Piotr PalarzWeb DeveloperNa początku dowiesz się jakie nowości pojawiły się w języku, jeśli chodzi o tworzenie zmiennych i stałych. Poznasz dwa nowe słowa let i const, a także dokładnie omówimy ich różnice, względem znanego nam do tej pory słowa var. Następnie poruszymy temat obiektów. Zobaczysz jak nowy zapis pozwoli znaczenie ułatwić nam pracę i sprawić, by kod był bardziej czytelny. W kolejnym rozdziale porozmawiamy o zmianach w funkcjach. Poznasz tzw. arrow functions wraz z poradami, kiedy z nich korzystać, a także z konsekwencjami ich użycia. Zobaczysz również, jak korzystać z domyślnych parametrów. Następną nowością będą operatory rest i spread, które znacząco uproszczą pisanie kodu dla funkcji i tablic. Chwilę później rzucimy okiem na bardzo ciekawy temat, mianowicie na tzw. destructuring. To nowa funkcja języka, która pozwala w łatwy sposób wyciągnąć odpowiednie dane z tablic i obiektów, nawet jeżeli te posiadają kilkupoziomową, zagnieżdżoną strukturę. Zmian doczekały się również ciągi znaków. Poznasz nowy zapis, tzw. template string, a także możliwość wykorzystania funkcji tagujących.
ES6 wprowadza do języka JavaScript zapis klas. I choć na początku wydaje się, że to duży krok w stronę klasycznych obiektowych języków programowania, to jak się przekonasz, jest to w dużej mierze tzw. syntactic sugar, a więc zupełnie nowy, prostszy zapis, a prawie identyczne jak wcześniej działanie, oparte na dziedziczeniu prototypowym. W kursie poruszymy również temat Symboli oraz tego jak z nimi pracować, a chwilę później poznasz iteratory. To konstrukcje ułatwiające iterację, które znacząco upraszczają pracę z kolekcjami danych. Wraz z iteratorami poznasz również generatory, które ułatwiają z kolei tworzenie tych iteratorów. Istotną nowością w ES6 są również natywne Promise. To sposób na rozwiązanie problemu asynchroniczności, który znamy od bardzo dawna w postaci różnych bibliotek. Od teraz jednak Promisy znajdują się bezpośrednio w języku. Nowymi konstrukcjami, które pozwalają pracować z kolekcjami danych, są Map i Set. Dowiesz się jak z nich korzystać, a także do czego są przydatne. W jednym z rozdziałów rzucimy też okiem na tzw. Proxy API. To mechanizm języka, który pozwala na dość niskopoziomowy dostęp do różnych operacji. I choć być może nie jest to coś, z czego będziesz korzystał nad wyraz często, to warto wiedzieć, jakie są nowe możliwości tego API.
Jedną z najlepszych nowości, która zawitała do języka JavaScript wraz z ES6 są moduły. To możliwość dzielenia kodu na wiele plików, z których można pewne wartości wyeksportować, a następnie zaimportować je w innych modułach. Tutaj dowiesz się wszystkiego, co z modułami związane. Zobaczysz wiele sposobów na eksport i import, a także jak pracować z modułami w przeglądarkach internetowych. Kurs skupia się na omówieniu wszystkich najważniejszych nowości w ES6, dzieląc je na rozdziały. Jeden z nich natomiast, poświęcony został omówieniu mniejszych zmian, które znalazły się w specyfikacji. Poznasz w nim np. nowe metody tablic czy ulepszoną współpracę z Unicode.
Specyfikacja EcmaScript 2015 wprowadziła naprawdę bardzo wiele zmian, ale jej twórcy założyli, że od tego czasu każda kolejna wersja specyfikacji będzie pojawiać się co roku. Oznacza to przede wszystkim, że nie będziemy na raz bombardowani aż tak wieloma zmianami, jak w 2015 roku. W tym kursie nie zabrakło zatem omówienia nowości ze specyfikacji ES2016 oraz 2017, gdzie poznasz np. nowe metody dla stringów czy funkcje asynchroniczne.
Kiedy będziesz już uzbrojony w solidną wiedzę z zakresu nowości w ES6, dowiesz się jak w praktyce pracuje się dzisiaj z tym standardem. W jednym z rozdziałów omówimy nowoczesny workflow z użyciem npm i wykorzystamy popularne narzędzie webpack, do pracy z modułami, a także do transpilowania kodu ES6 do wersji ES5. Dzięki temu nowoczesny kod, który napiszemy, będzie mógł być uruchamiany również w starszych przeglądarkach, które nie wspierają najnowszego standardu. Dowiesz się na co zwrócić uwagę, by wszystko działało bez zarzutu.
Zwieńczeniem tego kursu będzie praktyczny projekt, w którym od podstaw wykonamy swoją własną bibliotekę do pracy z Obiektowym Modelem Dokumentu. Będzie ona w działaniu nieco podobna do znanej chyba wszystkim biblioteki jQuery. Na tym przykładzie postaramy się wykorzystać jak najwięcej wiedzy z zakresu ES6 zdobytej wcześniej. Stworzymy metody do pracy z drzewem dokumentu, a więc do wyszukiwania elementów, do tworzenia nowych, do przypisywania im klas, atrybutów czy styli CSS. Nie zabraknie również modułu odpowiedzialnego za współpracę z Ajax. Cały kod utworzymy oczywiście w sposób modułowy, aby bibliotekę można było łatwo rozwijać w przyszłości. Na koniec projekt ten przetranspilujemy do kodu ES5 z użyciem Babel i przetestujemy w starszej przeglądarce Internet Explorer 11, aby upewnić się, że nasza biblioteka działa poprawnie.
Kurs ten jest dla wszystkich osób, które znają już język JavaScript i czują się w pracy z nim swobodnie. Jeśli zatem chciałbyś pracować z nowoczesnym kodem JavaScript, to ten kurs jest zdecydowanie dla Ciebie. A może masz zamiar poznać framework Angular lub bibliotekę React? Tam również wykorzystywany jest najnowszy zapis ES6, więc wiedza ta będzie naprawdę pomocna. Z solidną wiedzą z zakresu EcmaScript 6, bez trudu pozostaniesz na bieżąco z każdą kolejną edycją tej specyfikacji.
W tej lekcji porozmawiamy o kolejnej nowości jeżeli chodzi o klasy w ES6. Mianowicie
o możliwości tworzenia metod statycznych i teraz jest to coś, co
można było zrobić wcześniej w ES5, ale w inny sposób, o którym za moment. Mamy
klasę person, którą już widziałeś i ona ma tutaj dodaną metodę sayHello. Pamiętaj,
że ona jest dodana na prototypie. Natomiast chciałbym teraz dodać sobie metodą
statyczną. I co to znaczy, że metoda jest statyczna? Otóż, jeżeli
jest dodana na prototypie, tak jak tutaj, to mogę z niej skorzystać, dopiero kiedy utworze nowy
obiekt, czyli person1 kropka sayHello wywołuje tę metodę. Natomiast
nie mogę napisać Person, czyli odwołać do tej klasy sayHello. To
mi nie zadziała, bo wiemy że sayHello nie jest na Person, ale jest na prototype dopiero, czyli
w tym obiekcie prototypu. Natomiast metody statyczne to byłyby takie, które są
bezpośrednio przypisane do klasy, a więc odwołuje się do nazwy klasy i
bezpośrednio do metody, więc mógłbym sobie dodać metodę statyczną
w taki sposób jak Ci teraz pokażę. Napiszmy Person, chciałbym dodać metodę,
która się będzie nazywała Create i byłaby to funkcja, która pozwoli
mi tworzyć nowe obiekty. Ona po prostu zwracałaby new Person
i przekazywałaby argumenty, które zostaną przekazane w tym miejscu. Powiedzmy,
że byłoby to firstName i lastName, ale za moment sobie to troszeczkę zmienimy i przekazane
byłoby to tutaj, czyli firstName, lastName, okej.
I w ten sposób mogłem sobie utworzyć person2 i napisać Person create
chwiej i przekazałbym sobie tutaj na przykład Anna Nowak. Oczywiście
podejrzyjmy to sobie tutaj w konsoli czy nie ma żadnego błędu. Napiszmy person2. No
i okaże się, że mamy tutaj Anna Nowak. Natomiast właśnie w ES5 tak
byśmy dodali metodę statyczną. Wiemy, że funkcje są obiektami w języku JavaScript, a
do każdego obiektu możemy po kropce przypisać co nam się podoba. Dlatego to działa. Natomiast w ES6
możemy stworzyć metody statyczne za pomocą słowa static, czyli
piszemy sobie tutaj i następnie normalnie metodę, tak
jak robiliśmy to wyżej, czyli napisalibyśmy create, w ten sposób i
to oznacza, że dokładnie tak samo będzie można z tego skorzystać, czyli person kropka
create i powinien być efekt dokładnie taki sam. Zobaczmy person2. No
i jak widzisz, jest dokładnie tak samo. Natomiast ten przykład możemy sobie jeszcze troszeczkę
zmodyfikować, aby przypomnieć sobie jak korzystać na przykład z destructuring'u parametrów,
więc powiedzmy, że to takiej metody chciałbym móc przekazać obiekt, który mam
tutaj pod json i powiem ci za moment dlaczego. Więc spróbujmy sobie
tutaj skorzystać z destructuring'u. Powiedzmy, że przekażemy obiekt, który
będzie miał fName i lName, taki byśmy pobrali json'em. Zauważ, że to
na razie jest string, to nie jest obiekt, więc przypomnę ci jak działa destructuring. Jeżeli
tutaj wewnątrz tej funkcji pod firstName coś chcę mieć, to muszę tutaj napisać
firstName, ale obiekt, który przyłożymy za moment do tej funkcji
create, będzie to miał pod fName, więc pisaliśmy to w ten sposób. W razie
czego wróć sobie do lekcji o destructuring'u, a lastName zrobilibyśmy za pomocą
lName i tutaj jeszcze
byśmy zrobili domyślny parametr jako pusty obiekt, gdyby on nie został podany. To
oznacza, że teraz kiedy będziemy wywoływać person create, to musimy tutaj przekazać
jakiś obiekt i pokazuje ci ten przykład dlatego, że taka metoda statyczna
create może być bardzo przydatna jeżeli na przykład pobierałbyś jakieś dane jsonem
i w pętli zamieniałbyś je na obiekty JavaScript'owe i następnie
chciałbyś z nich tworzyć nowe obiekty twojej klasy. Nieważne co by to było, czy
to będą jakieś osoby czy to do czyli task'i do wykonania, to mógłbyś sobie stworzyć
taką metodę pomocniczą Create i tutaj skorzystałem z destructuring'u parametrów
po to, żeby wewnątrz łatwo się było do tego odwołać. Taki json
powiedzmy, pobraliśmy Ajax'em. Jest to string i mogę sobie wywołać Person create
przekazując JSON parse, czyli JSON parse mi taki string zamieni
na obiekt JavaScript'owy, który ma firstName i lastName zapisane w taki sposób. No
i dzięki temu, że tu będzie obiekt, to zostanie on przyłożony właśnie do tego destructuring'u
i pod tymi parametrami będę miał poprawne dane. Okej, więc w
ten sposób sobie to zróbmy i person2 to będzie
właśnie Anna Kowalska. Jak zatem widzisz, w taki oto sposób można sobie utworzyć dowolne
metody statyczne i ważne jest to, że one nie są dostępne na instancjach, czyli
person1 gdybym tutaj napisał kropka create, on
nie ma to do tego dostępu. Dlatego, że to nie jest na prototypie, tylko bezpośrednio
jakby na tej klasie person i co jest ciekawe, gdybyśmy tutaj zrobili sobie dziedziczenie
to dziedziczymy również metody statyczne, czyli gdybyśmy mieli tą klasę co
wcześniej, czyli employee i ona by robiła extends person, to
też miałaby dostęp do metody Create, w dokładnie taki sam sposób. Jeśli
natomiast do klasy chciałbyś dodać sobie statyczne właściwości, a nie metody, nie możesz
tutaj dodawać właściwości, musisz to zrobić standardowo, czyli na przykład person jakieś id
czy coś w tym stylu. Możesz to zrobić i też jest to dostępne wtedy na person
tak samo jak i metoda Create, ale nie da się tego zrobić zapisu klasy
w taki oto sposób. No i to by było tyle w tej lekcji. Pokazałem ci jak tworzyć
z użyciem słowa kluczowego static metody statyczne. No i jak one działają, jak
można było też to zrobić w ES5. Teraz natomiast jest to o tyle lepszy zapis, że wszystko
mamy tutaj wewnątrz i taka metoda na przykład jest dodawana na prototypie, ale z użyciem
słowa static jest dodawana bezpośrednio do klasy person.