Skip to content

Классы и экземпляры

Как создавать похожие объекты и общие для них методы.

also in web development basics

On this page

Класс - описание для создания похожих объектов. Например, один класс Book задаёт общие свойства книги, а каждый созданный объект хранит название, автора и год конкретной книги. Такой объект называют экземпляром класса.

main.js
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 позволяет создать более узкий класс на основе другого. Например, журнал – тоже издание, но у него есть дополнительный месяц публикации.

main.js
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). Он подходит для операции над несколькими экземплярами или для вспомогательного действия, которому не нужен один конкретный экземпляр.

main.js
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 по классам.