Классы в JavaScript — как объявлять и чем constructor отличается от методов?
Перешёл к ООП и наткнулся на классы js. Раньше делал объекты просто через {}, а тут какой-то class, constructor, new.
Не понимаю: зачем нужен класс, если можно создать объект напрямую? И что вообще делает constructor? Покажите минимальный рабочий пример с методами, пожалуйста.
2 ответа
Класс — это шаблон, по которому можно штамповать однотипные объекты. Если тебе нужен один объект — да, проще написать {}. Но когда нужно много похожих (например, 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.
Важная мелочь, на которой все спотыкаются: создавать объект класса нужно ОБЯЗАТЕЛЬНО через new.
const u = User('Аня', 20); // ошибка! Class constructor cannot be invoked without 'new'
const u = new User('Аня', 20); // правильно
Без new JS не поймёт, для чего ты вызвал класс, и кинет ошибку. Так что запомни: класс + new всегда вместе.