Классы и экземпляры
Как создавать похожие объекты и общие для них методы.
также в основах веб-разработки
На этой странице
Класс - описание для создания похожих объектов. Например, один класс Book задаёт общие свойства книги, а каждый созданный объект хранит название, автора и год конкретной книги. Такой объект называют экземпляром класса.
class Book {
constructor(title, author, year) {
this.title = title;
this.author = author;
this.year = year;
}
getSummary() {
return `«${this.title}» – ${this.author}, ${this.year} год`;
}
}
const firstBook = new Book("Война и мир", "Лев Толстой", 1869);
console.log(firstBook.getSummary());new Book(...) создаёт объект по описанию класса. constructor - специальная функция, которая получает начальные данные в момент создания объекта. Внутри неё this обозначает новый экземпляр: строки this.title = title и похожие сохраняют переданные значения в его свойствах. Метод getSummary() затем собирает эти свойства в одну строку.
Наследование и super
extends позволяет создать более узкий класс на основе другого. Например, журнал – тоже издание, но у него есть дополнительный месяц публикации.
class Magazine extends Book {
constructor(title, author, year, month) {
super(title, author, year);
this.month = month;
}
getSummary() {
return `${super.getSummary()}, выпуск за ${this.month}`;
}
}
const magazine = new Magazine("Наука", "Редакция", 2025, "март");
console.log(magazine.getSummary());extends объявляет, что Magazine построен на основе Book. super(...) запускает конструктор Book и передаёт ему общие свойства. В дочернем конструкторе его вызывают до обращения к this.
Метод с таким же именем в дочернем классе заменяет вариант родителя для экземпляров дочернего класса. В примере журнал добавляет месяц, используя результат super.getSummary().
Статические методы
Обычный метод вызывают у экземпляра: firstBook.getSummary(). Статический метод вызывают у самого класса: BookWithComparison.compareAge(firstBook, secondBook). Он подходит для операции над несколькими экземплярами или для вспомогательного действия, которому не нужен один конкретный экземпляр.
class BookWithComparison {
constructor(title, year) {
this.title = title;
this.year = year;
}
static compareAge(first, second) {
if (first.year < second.year) {
return `«${first.title}» издана раньше`;
}
if (first.year > second.year) {
return `«${second.title}» издана раньше`;
}
return "Книги изданы в одном году";
}
}
const firstBook = new BookWithComparison("Война и мир", 1869);
const secondBook = new BookWithComparison("Анна Каренина", 1877);
console.log(BookWithComparison.compareAge(firstBook, secondBook));Ключевое слово static здесь означает, что compareAge относится к классу BookWithComparison, а не к одной книге. Поэтому вызываем его через BookWithComparison.compareAge(...).
JavaScript-классы используют прототипы для общей цепочки методов, но сначала достаточно научиться создавать экземпляры и вызывать методы. Подробности есть в руководстве MDN по классам.