Кратко
Класс — это шаблон для создания объектов. constructor задаёт начальные свойства. Методы — функции внутри класса. new создаёт экземпляр. class — это современный способ записи прототипов (не отдельный механизм).
Подробно
Что такое класс?
Класс — это шаблон (blueprint) для создания объектов.
class User { constructor(name, age) { this.name = name; this.age = age; }
greet() {
return Привет, ${this.name}!;
}
}
const user = new User('Анна', 25); console.log(user.greet()); // 'Привет, Анна!'
constructor:
- Вызывается автоматически при new
- Задаёт начальные свойства
- Один конструктор на класс
Методы:
- Определяются без function
- Доступны через this
Создание экземпляра: new User('Анна', 25) — создаёт объект и вызывает constructor
Важно: class — это СИНТАКСИЧЕСКИЙ САХАР: class User {} эквивалентно function User() + prototype.method
ES6 class не создаёт новый механизм наследования — он просто упрощает запись прототипов.
Ментальная модель
Класс — как форма для лепнины. Один раз сделали форму (class), а потом лепим сколько угодно экземпляров (new). Каждый экземпляр одинаков по структуре, но с разными данными.
Примеры
**Самый простой:**
class Animal {
constructor(name) {
this.name = name;
}
speak() {
return `${this.name} издаёт звук`;
}
}
const dog = new Animal('Рекс');
console.log(dog.speak()); // 'Рекс издаёт звук'Класс + constructor + метод + new = экземпляр.
**Простой:**
class BankAccount {
#balance = 0; // приватное поле
constructor(owner, initialBalance = 0) {
this.owner = owner;
this.#balance = initialBalance;
}
deposit(amount) {
this.#balance += amount;
return this.#balance;
}
get balance() {
return this.#balance;
}
}
const account = new BankAccount('Анна', 1000);
console.log(account.balance); // 1000
account.deposit(500);
console.log(account.balance); // 1500Класс с приватным полем и методами.
**Реальный пример:**
class TodoList {
#items = [];
add(text) {
this.#items.push({ text, done: false });
}
complete(index) {
if (this.#items[index]) {
this.#items[index].done = true;
}
}
get pending() {
return this.#items.filter(item => !item.done);
}
}
const todos = new TodoList();
todos.add('Купить молоко');
todos.add('Написать код');
todos.complete(0);
console.log(todos.pending.length); // 1Реальный пример: список задач с инкапсуляцией.
Частые ошибки
**Неправильно:** Забывать new при создании экземпляра
**Почему:** User('Анна') без new вызовет ошибку (в strict mode) или не создаст экземпляр.
**Правильно:** Всегда: const user = new User('Анна').
**Неправильно:** Думать, что class — это новый механизм наследования
**Почему:** class — синтаксический сахар над прототипами. Механизм тот же.
**Правильно:** class упрощает запись, но не создаёт новую систему.
**Неправильно:** Использовать стрелочные функции для методов
**Почему:** Стрелочные функции в классе — это свойства экземпляра (не на prototype).
**Правильно:** Для методов класса используйте обычные методы.
Важно запомнить
- class — шаблон для создания объектов
- constructor вызывается при new
- Методы определяются без function
- class — синтаксический сахар над прототипами
- new создаёт экземпляр
Связь
Назад: Вы знаете объекты (J11) и геттеры/сеттеры (JI7) — теперь у вас есть структурный способ их создания.
Вперёд: Следующий урок (JI9) — наследование классов через extends и super.