Що таке клас у JavaScript?
Клас у JavaScript - це синтаксичний спосіб опису об'єктів та їхньої поведінки (методів), введений у стандарті ES6 (ECMAScript 2015). Він є синтаксичним цукром над прототипним успадкуванням, яке існувало в мові споконвічно. Тобто під капотом класи працюють через ті самі механізми прототипів.
Основні особливості класу
- Оголошення класу:
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hi, my name is ${this.name}`);
}
}
const user = new Person("Alice", 25);
user.greet(); // Hi, my name is Alice- Метод
constructor()викликається під час створення нового екземпляра (new Person()). thisвсередині конструктора посилається на об'єкт, що створюється.
Успадкування класів
Класи можуть успадковувати властивості й методи інших класів за допомогою ключового слова extends.
class Animal {
speak() {
console.log("The animal makes a sound");
}
}
class Dog extends Animal {
speak() {
console.log("The dog barks");
}
}
const dog = new Dog();
dog.speak(); // The dog barksЯкщо потрібно викликати метод батьківського класу, використовується super():
class Dog extends Animal {
speak() {
super.speak(); // викликає метод батьківського класу
console.log("Woof woof");
}
}Статичні методи та властивості
Іноді метод стосується не конкретного екземпляра, а самого класу:
class MathUtils {
static square(n) {
return n * n;
}
}
console.log(MathUtils.square(5)); // 25Статичні методи не можна викликати через екземпляр (
new MathUtils()), лише через сам клас.
Геттери та сеттери
Дозволяють керувати доступом до властивостей класу:
class User {
constructor(name) {
this._name = name;
}
get name() {
return this._name.toUpperCase();
}
set name(value) {
this._name = value.trim();
}
}
const u = new User(" Alice ");
console.log(u.name); // ALICEПриватні поля та методи
Синтаксис із символом решітки # робить властивість або метод недоступними ззовні:
class Account {
#balance = 0;
deposit(amount) {
this.#balance += amount;
}
getBalance() {
return this.#balance;
}
}
const acc = new Account();
acc.deposit(100);
console.log(acc.getBalance()); // 100
// acc.#balance - Помилка: приватна властивістьПідсумок
| Особливість | Опис |
|---|---|
constructor() | Ініціалізація екземпляра |
extends | Успадкування |
super | Виклик конструктора або методу батьківського класу |
static | Методи класу, а не екземпляра |
get / set | Керування доступом до властивостей |
# | Приватні поля та методи |
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.