Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: proto, прототип

Для чего нужен прототип?

Этот вопрос проверяет знание ключевой концепции прототипного наследования в JavaScript.

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

Прототип — это объект, от которого другой объект может наследовать свойства и методы. В JavaScript каждый объект имеет скрытое свойство [[Prototype]], которое указывает на его прототип. Это позволяет организовать наследование, чтобы не дублировать код и переиспользовать общие методы. Например, если метод не найден в объекте, JavaScript ищет его в прототипе.

Пример:

const animal = { eats: true };
const dog = Object.create(animal);
console.log(dog.eats); // true

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

В JavaScript объекты могут наследовать свойства и методы от других объектов. Этот процесс происходит через механизм, называемый прототипным наследованием. Прототип — это объект, связанный с другим объектом через скрытое свойство [[Prototype]] (или __proto__ в старых браузерах).

Как работает прототипное наследование?

Когда вы обращаетесь к свойству объекта:

  • JavaScript сначала ищет его в самом объекте.

  • Если свойство не найдено, поиск продолжается в его прототипе.

  • Если свойство есть в прототипе, оно используется.

Пример:

const animal = {
	eats: true,
	walk() {
		console.log("Гуляет");
	}
};
const dog = Object.create(animal); // Создаём объект dog с прототипом animal
dog.barks = true;
console.log(dog.eats); // true (унаследовано от animal)
dog.walk();           // "Гуляет" (метод из прототипа animal)
console.log(dog.barks); // true (собственное свойство dog)

Почему прототип важен?

  • Экономия памяти: Общие методы и свойства хранятся в одном объекте (прототипе), а не копируются для каждого экземпляра.

  • Расширяемость: Можно добавлять новые методы в прототип, и они сразу станут доступны всем объектам, которые наследуют этот прототип.

Создание прототипов

Через Object.create()
Вы явно указываете, какой объект будет прототипом.

const animal = { eats: true };
const rabbit = Object.create(animal);
console.log(rabbit.eats); // true

Через функции-конструкторы
Функции-конструкторы автоматически связывают созданный объект с прототипом через свойство prototype.

function Animal(name) {
	this.name = name;
}
Animal.prototype.eats = true;
const dog = new Animal("Собака");
console.log(dog.eats); // true

Через классы
Классы в JavaScript — это удобная обёртка над прототипным наследованием.

class Animal {
	constructor(name) {
		this.name = name;
	}
	walk() {
		console.log(`${this.name} гуляет`);
	}
}
const cat = new Animal("Кошка");
cat.walk(); // "Кошка гуляет"

Пример поиска свойства в цепочке прототипов:

const grandparent = { heritage: "ancient" };
const parent = Object.create(grandparent);
parent.legacy = "modern";
const child = Object.create(parent);
console.log(child.heritage); // "ancient" (из grandparent)
console.log(child.legacy);   // "modern" (из parent)

Практическое применение

Прототипы часто используются для создания иерархий объектов, например:

  • В веб-разработке — методы Array или Object (например, push, map, toString) определены в их прототипах.

  • В больших приложениях — для наследования общих функций между объектами.

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

Уровень

  • Рейтинг:

    3

  • Сложность:

    7

Навыки

  • JavaScript

    JavaScript

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

#proto

#прототип

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