JS Intermediate

Классы

Научиться создавать классы с конструктором, методами и свойствами, понимая что class — это синтаксический сахар над прототипами.

Средний (Intermediate)
Нужно знать:ОбъектыФункции

Кратко

Класс — это шаблон для создания объектов. 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). Каждый экземпляр одинаков по структуре, но с разными данными.


Примеры

**Самый простой:**

javascript
class Animal {
  constructor(name) {
    this.name = name;
  }

  speak() {
    return `${this.name} издаёт звук`;
  }
}

const dog = new Animal('Рекс');
console.log(dog.speak()); // 'Рекс издаёт звук'

Класс + constructor + метод + new = экземпляр.

**Простой:**

javascript
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

Класс с приватным полем и методами.

**Реальный пример:**

javascript
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.


Читайте дальше

Материалы курса JS Intermediate — PROlab Academy.