Klasy w JavaScripcie: konstruktor, metody i dziedziczenie

Klasy w JavaScripcie: konstruktor, metody i dziedziczenie
Aktualizacja z 10 stycznia 2023 roku
Jeśli szukasz kursu JavaScriptu, który obejmuje także klasy, może cię zainteresować mój nowy kurs JavaScriptu.

Klasy trafiły do JavaScriptu wraz z ECMA2015. W odróżnieniu od klas w językach obiektowych z krwi i kości, klasy w JavaScripcie to tylko szczególny rodzaj funkcji. Zamiast słowa kluczowego „function” piszemy jednak „class”. Wprowadzono je po to, żeby składnia przypominała tę znaną z innych języków obiektowych (Java, Python, C++).

Definiowanie klasy

javascript
class Rectangle {
    constructor(height, width) {
        this.height = height;
        this.width = width;
    }
}

Żeby zadeklarować klasę, użyj słowa kluczowego class i podaj jej nazwę (tutaj Rectangle).

Constructor: to specjalna metoda, która inicjalizuje instancję klasy. Za każdym razem, gdy tworzymy nową instancję, konstruktor zostaje wywołany.

Metody w klasie

javascript
class Rectangle {
    constructor(height, width) {
        this.height = height;
        this.width = width; 
    }
    // Méthode prototype
    area() {
        return console.log(`La zone est ${this.height*this.width}`); 
    }
    // Méthode statique
    static display(rect){
        return console.log(`Height: ${rect.height} Width: ${rect.width}`); 
    }
}

const rectangle = new Rectangle(5, 4);  // Instancier la classe
rectangle.area(); 
// La zone est 20
Rectangle.display(rectangle); 
// Height: 5 Width: 4 
  • Metoda prototypu: area() jest metodą prototypu.
  • Metoda statyczna: display() jest metodą statyczną.

Metoda prototypu

Metoda prototypu to metoda dostępna dopiero wtedy, gdy utworzysz instancję klasy. W powyższym przykładzie widać jej wywołanie (linia 17): na obiekcie, przez nazwę metody i nawiasy (ewentualne parametry trafiłyby do środka nawiasów).

Metoda statyczna

Metodę statyczną można wywołać bez tworzenia instancji klasy. Metody statyczne są zdefiniowane na samej klasie, a nie na obiekcie. Oznacza to, że nie wywołasz metody statycznej na obiekcie (rectangle), tylko na klasie (Rectangle), tak jak w linii 19.

Dziedziczenie

javascript
class Car {
    constructor(brand) {
        this.carname = brand; 
    }
    present() {
        return 'c\'est ' + this.carname;  
    }
}

class Model extends Car {
    constructor(brand, model) {
        super(brand); 
        this.model = model; 
    }
    show() {
        return console.log(`${this.present()} ${this.model}`); 
    }
}

const mycar = new Model("Ford", "Mustang"); 
mycar.show(); 
// c'est Ford Mustang

Do dziedziczenia klas służy słowo kluczowe extends: klasa potomna dopisuje extends zaraz za swoją nazwą.

Klasa utworzona z dziedziczeniem przejmuje wszystkie metody innej klasy. W powyższym przykładzie klasa Model dziedziczy wszystkie metody klasy Car.

Właściwość super() odwołuje się do klasy nadrzędnej. Wywołując super() w konstruktorze, wywołujemy konstruktor rodzica i zyskujemy dostęp do jego właściwości oraz metod.
Dziedziczenie przydaje się do ponownego wykorzystania kodu: tworząc nową klasę, możesz sięgnąć po właściwości i metody klasy już istniejącej.

JavaScript

Damien Flandrin Web developer od 2010 roku, twórca Gekkode i Email Impact. Każdy artykuł jest sprawdzany na prawdziwym projekcie przed publikacją. Kontakt
Newsletter

Nowe testy, poradniki i projekty — e-mailem.

Powtarzalne testy, wersjonowany kod, datowane wyniki. Nigdy spamu.