← Все вопросы

Классы в JavaScript — как объявлять и чем constructor отличается от методов?

Задан 32 месяца назад180 просмотров2 ответа
5

Перешёл к ООП и наткнулся на классы js. Раньше делал объекты просто через {}, а тут какой-то class, constructor, new.

Не понимаю: зачем нужен класс, если можно создать объект напрямую? И что вообще делает constructor? Покажите минимальный рабочий пример с методами, пожалуйста.

2 ответа

10
✓ Принятый ответ — помог автору

Класс — это шаблон, по которому можно штамповать однотипные объекты. Если тебе нужен один объект — да, проще написать {}. Но когда нужно много похожих (например, 100 пользователей), класс избавляет от копипасты.

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

class User {
  constructor(name, age) {
    this.name = name;   // this — это создаваемый объект
    this.age = age;
  }

  greet() {
    return `Привет, я ${this.name}, мне ${this.age}`;
  }

  birthday() {
    this.age++;
  }
}

const anna = new User('Аня', 20);
const ivan = new User('Иван', 25);

console.log(anna.greet());   // Привет, я Аня, мне 20
ivan.birthday();
console.log(ivan.age);       // 26

Разберём по частям:

  • constructor — особый метод, который запускается автоматически при new User(...). В нём ты задаёшь начальные свойства объекта через this.
  • greet и birthday — обычные методы, они доступны у каждого созданного объекта.
  • new создаёт новый пустой объект, вызывает constructor и возвращает готовый экземпляр.

Главный плюс: один раз описал поведение в классе — и оно есть у всех объектов. Методы хранятся в одном месте (в прототипе), а не копируются в каждый объект, так что это ещё и экономно по памяти.

Классы умеют наследоваться через extends — это уже следующий шаг, когда захочешь сделать, например, Admin extends User.

4

Важная мелочь, на которой все спотыкаются: создавать объект класса нужно ОБЯЗАТЕЛЬНО через new.

const u = User('Аня', 20);   // ошибка! Class constructor cannot be invoked without 'new'
const u = new User('Аня', 20); // правильно

Без new JS не поймёт, для чего ты вызвал класс, и кинет ошибку. Так что запомни: класс + new всегда вместе.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект