class
Definiuje klasę, czyli szablon do tworzenia obiektów z tymi samymi polami i metodami.
Przykład
#class Student {
constructor(name) {
this.name = name
this.points = 0
}
addPoints(amount) {
this.points += amount
return this
}
}
const ania = new Student('Ania')
ania.addPoints(50).addPoints(30)
console.log(ania)
console.log(ania instanceof Student)Definicja i zastosowanie
#Słowo class tworzy szablon obiektów. Metoda constructor uruchamia się przy każdym new i ustawia pola nowej instancji przez this. Metody zapisane w ciele klasy trafiają do prototypu, więc wszystkie instancje korzystają z tych samych funkcji.
Klasa może dziedziczyć po innej dzięki extends. W konstruktorze klasy pochodnej trzeba wywołać super() przed pierwszym użyciem this, a super.method() wywołuje wersję metody z klasy bazowej. Pola i metody oznaczone jako static należą do samej klasy, a nie do instancji.
Pola z prefiksem # są prywatne i dostęp do nich jest możliwy tylko z wnętrza klasy. Gettery i settery (get, set) udostępniają wyliczane wartości jak zwykłe właściwości. Ciało klasy zawsze działa w trybie ścisłym, a w przeciwieństwie do deklaracji funkcji klasy nie można użyć przed linią, w której ją zadeklarowano.
Składnia
#class Name {
field = value
#privateField = value
static staticField = value
constructor(param) {
this.property = param
}
method() {}
get computed() {}
set computed(value) {}
static staticMethod() {}
}
class Child extends Name {}Więcej przykładów
#class User {
constructor(name) {
this.name = name
}
describe() {
return `Użytkownik ${this.name}`
}
}
class Mentor extends User {
constructor(name, course) {
super(name)
this.course = course
}
describe() {
return `${super.describe()}, mentor kursu ${this.course}`
}
}
const mentor = new Mentor('Kuba', 'React')
console.log(mentor.describe())
console.log(mentor)class Wallet {
#coins = 0
static withBonus(bonus) {
const wallet = new Wallet()
wallet.add(bonus)
return wallet
}
add(amount) {
if (amount <= 0) throw new RangeError('Kwota musi być dodatnia')
this.#coins += amount
}
get balance() {
return `${this.#coins} monet`
}
}
const wallet = Wallet.withBonus(100)
wallet.add(25)
console.log(wallet.balance)
console.log(wallet)
console.log(Object.keys(wallet))Pole #coins nie jest widoczne z zewnątrz ani w Object.keys(). Odczyt wallet.#coins poza klasą to błąd składni.
Obsługa przeglądarek
#Szeroko dostępne
Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.
- Chrome
- Edge
- Firefox
- Safari
Dobre praktyki
#- Nie zapominaj o
new. Wywołanie klasy jak zwykłej funkcji, np.Student("Ania"), rzucaTypeError. - Metoda przekazana jako callback traci
this, np. wbutton.addEventListener("click", game.start). Użyj strzałki() => game.start()albogame.start.bind(game). - Nie każdy kod potrzebuje klas. Do prostych danych wystarczy literał obiektu, a do pojedynczej operacji zwykła funkcja.
Powiązane hasła
#- functionDeklaruje nazwaną funkcję: blok kodu z parametrami, który można wywoływać wiele razy i który może zwrócić wynik.
- thisSłowo kluczowe wskazujące obiekt, w kontekście którego wywołano funkcję.
- get / setWłaściwości obliczane przy odczycie (get) i obsługiwane przy zapisie (set).
- Object.create()Tworzy nowy obiekt z podanym prototypem.
- throwRzuca wyjątek: przerywa bieżący kod i przekazuje błąd do najbliższego bloku catch.
- extendsTworzy klasę pochodną, która dziedziczy metody innej klasy i może je rozszerzać lub nadpisywać.
Widzisz błąd albo brakuje przykładu? Napisz do nas.