Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: классы, наследование

Как работают классы под капотом?

Этот вопрос помогает понять внутреннее устройство классов в JavaScript, а также их взаимодействие с прототипами и механизмами наследования.

Короткий ответ

Классы в JavaScript представляют собой синтаксический сахар для прототипного наследования. При создании класса интерпретатор JavaScript создает объект и связывает его с прототипом класса, позволяя наследовать его методы и свойства. Каждый экземпляр класса получает доступ к этим методам через цепочку прототипов, что обеспечивает эффективное использование памяти.

Длинный ответ

JavaScript классы — это мир внутренних механизмов и прототипного наследования. Давайте разберемся, что происходит "под капотом", когда вы создаете класс.

 Прототипы: Корень всего

 Прежде чем перейти к классам, вспомним про прототипы. В JavaScript классы — это по сути красивая обертка над прототипным наследованием.

// Старый способ до классов
function User(name) {
	this.name = name;
}
User.prototype.sayHi = function() {
	console.log(`Привет, я ${this.name}`);
};
const user = new User('Иван');
user.sayHi(); // Работает так же, как и современный класс

 Класс под микроскопом

Когда вы пишете современный класс:

class User {
	constructor(name) {
		this.name = name;
	}
	sayHi() {
		console.log(`Привет, я ${this.name}`);
	}
	static createAnonymous() {
		return new User('Аноним');
	}
}

Внутри происходит примерно следующее:

  1. Конструктор: Метод constructor превращается в функцию-конструктор.

  2. Методы экземпляра: Добавляются в prototype класса.

  3. Статические методы: Привязываются непосредственно к классу.

Магия создания объекта, когда вы пишете new User('Иван'), происходит:

  1. Создается новый объект

  2. Контекст `this` привязывается к этому объекту

  3. Вызывается конструктор

  4. Объект возвращается (если не указано иное)

Наследование: Под капотом

class Employee extends User {
	constructor(name, position) {
		super(name);  // Вызов родительского конструктора
		this.position = position;
	}
}

При наследовании JavaScript:

  • Устанавливает прототипную цепочку

  • Копирует статические методы

Сохраняет связь между классами

Тонкости и подводные камни

  1. Классы — функции:

class MyClass {}
console.log(typeof MyClass); // "function"
  1. Классы не всплывают:

const obj = new MyClass(); // ReferenceError
class MyClass {}
  1. Методы не перечисляемы по умолчанию:

class Example {
	method() {} // Не будет виден в for...in
}

Бонус: Как это работает на уровне движка

Движок V8 (Chrome, Node.js) оптимизирует классы:

  • Кэширует прототипы

  • Используют быстрые внутренние механизмы создания объектов

  • Применяют специальные оптимизации для частых операций

Заключение

Классы в JavaScript — это мощный инструмент, который скрывает сложную механику прототипного наследования за простым и понятным синтаксисом. Понимание того, что происходит "под капотом", поможет вам писать более эффективный и осознанный код.

Уровень

  • Рейтинг:

    3

  • Сложность:

    6

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#классы

#наследование

Подпишись на React Developer в телеграм