Jeżeli myślisz, że JavaScript nie wspiera paradygmatu obiektowego, to jesteś w błędzie 🙂. Całkiem mocno pochylił się w jego stronę i to do stopnia jawnego wspierania klas 🥳. Słowo kluczowe "class" w języku JavaScript istnieje i to całkiem na serio 👍! A teraz poznaj szczegóły!
PADA "CLASS" W JĘZYKU JAVASCRIPT I WSZYSTKO JASNE!
Mały "polecony" dla czytelników znających dowolny język obiektowy 😄:
Drogi specjalisto od Javy, C# i tym podobnych języków obiektowych,
Jestem zmuszony uprzedzić Cię z racji tego, iż wyobraźnia może wprowadzić w błędne przeświadczenia. Klasy w języku JavaScript NIE SĄ tymi samymi klasami jakie widziałeś w innych językach! Różnią się wyglądem i składnią o wiele bardziej, niż możesz teraz przypuszczać. Proszę Cię o wzmożoną czujność i baczną obserwację podczas prezentowania przykładów jakie zostaną zawarte w niniejszej treści.
Myślę, że nie muszę się powtarzać 😊. Zaczynajmy!
BUDOWA KLASY
Dobra wiadomość jest taka, że jak "class" jest w języku Java i w C#, tak jest i w języku JavaScript 👇:
class MyClass {
}Klamerki też takie same definiujące "pole widzenia" 👁️. Natomiast konstruktor klasy definiuje się już inaczej:
class MyClass {
constructor() {
// instrukcje
}
}Znajdziesz go po słowie kluczowym "constructor" ℹ️. Konstruktor to metoda klasy wywoływana w chwili tworzenia obiektu na jej podstawie. Jest to pierwsza czynność wykonywana podczas "narodzin" instancji (obiektu) używając słowa kluczowego "new".
Konstruktor, jak to u wyżej wymienionych "kolegów", może przyjmować parametry do późniejszej inicjalizacji:
class MyClass {
constructor(x, y) {
this.x = x;
this.y = y;
}
}Uwaga dla znawców innych języków 📣! "class" w języku JavaScript nie wspiera przeciążania konstruktorów (zdefiniowanie dwóch/więcej metod o tej samej nazwie)! Wtedy musisz zastosować obejście w postaci przekazania obiektu jako parametru i przypisania wartości domyślnych w przypadku nieznalezienia pożądanej wartości 🔢:
class MyClass {
constructor(values) {
this.x = values.x || 50;
this.y = values.y || 100;
this.z = values.z || 200;
}
}Niekonwencjonalne użycie operatora alternatywy do zwracania wartości wytłumaczyłem w artykule o boolowskim typie danych, więc sięgnij tam po wyjaśnienia, jeśli zapis jest dla Ciebie enigmatyczny 🔍.
DANE SKŁADOWE
Dane składowe (zmienne w klasie) określamy tak samo, jak w atrybutach obiektu. Piszemy tak 👇:
class MyClass {
constructor() {
this.x = 50;
}
}albo tak:
class MyClass {
x = 50;
}Obie formy są poprawne ✅.
METODY
Metody też mogą występować, jak w pozostałych językach wspierających paradygmat obiektowy. Tutaj mała pułapka w zapisie - nie wstawiamy słowa "function", tak jak przy funkcjach "na zewnątrz" 👇:
class MyClass {
doSomething() {
// instrukcje
}
}tylko podajemy samą nazwę z parą nawiasów okrągłych dla potencjalnych parametrów ℹ️. To jest kolejny wyjątek jakim się wyróżnia "class" w języku JavaScript. I klamerki! Klamerki to rzecz niezbędna ⚠️!
Celem wywołania metody, konieczne jest utworzenie instancji obiektu, w taki sam sposób jak się to robi w innych językach obiektowych (w kolejnym nagłówku jest przykład, więc spokojnie 😅).
CHCĘ ZACHOWAĆ PRYWATNOŚĆ
Wreszcie coś, co daje przewagę klasom nad obiekty ✊. Składowe mogą być też prywatne. Wiesz jak to się robi? Nie, nie wstawiamy żadnych modyfikatorów dostępu, jak możesz myśleć!
class MyClass {
#x;
#doSomething() {
// instrukcje
}
}Znak krzyżyka (ang. hash) przed nazwą, czyni składową prywatną (niedostępną na zewnątrz) 🔒. Dotyczy to zarówno pól, jak i metod. Da to taki efekt, że nie będzie można się odwołać do składowej prywatnej na zewnątrz kodu.
Ukrywanie implementacji jest istotną rzeczą w programowaniu obiektowym. Jednym zdaniem - dobrze napisany kod dostępny dla innych osób to taki, który nie ujawnia szczegółów implementacji (żadna z nazw publicznych metod nie mówi niczego na temat użytych typów danych).
TWORZENIE INSTANCJI
Ostatnia rzecz - tworzenie obiektu na podstawie klasy 🔥. Robimy to tak samo, jak w pozostałych językach. Używamy słowa "new" 👇:
const myClassInstance = new MyClass();Od tej pory, możemy tak samo odwoływać się do wszystkich składowych, o ile nie są prywatne ⚠️!
![]() |
Klasa może zostać utworzona w języku JavaScript przy pomocy tego samego słowa jakie możesz znać z innych języków: "class"!
Artykuł nieduży lecz wartościowy ⭐. Garść informacji i przykładów 📖. To Ci powinno wystarczyć, żeby wiedzieć jak z tego skorzystać i się nie przestraszyć 😄!
