Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: function property, prototype, constructor, instance, JavaScript

Где хранится свойство, добавленное напрямую в функцию, и будет ли оно доступно у экземпляров?

Вопрос проверяет понимание различий между свойствами функции как объекта и свойствами её прототипа, что важно для работы с конструкторами и наследованием в JavaScript.

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

Свойство, добавленное напрямую в функцию-конструктор, хранится в самой функции как объекте и не будет доступно у её экземпляров через this. Оно доступно только через саму функцию-конструктор. Чтобы свойство было доступно у экземпляров, его нужно добавлять в prototype функции.

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

В JavaScript функции являются объектами, поэтому им можно добавлять свойства напрямую, как любому другому объекту. Однако, когда функция используется как конструктор (с ключевым словом new), создаётся новый объект (экземпляр), который наследует свойства из прототипа функции, но не получает прямые свойства самой функции.

Прямое свойство функции

Свойство, добавленное напрямую в функцию, принадлежит самому объекту функции. Оно доступно только через обращение к функции, но не через экземпляры, созданные с помощью этой функции.

function Car(model) {
  this.model = model;
}

// Добавляем свойство напрямую в функцию
Car.manufacturer = 'Toyota';

const myCar = new Car('Corolla');
console.log(Car.manufacturer); // 'Toyota'
console.log(myCar.manufacturer); // undefined
console.log(myCar.model); // 'Corolla'

Свойство в прототипе

Чтобы свойство было доступно у всех экземпляров, его нужно добавить в prototype функции. Тогда оно будет унаследовано через цепочку прототипов.

Car.prototype.getDetails = function() {
  return `${this.model} by ${Car.manufacturer}`;
};

console.log(myCar.getDetails()); // 'Corolla by Toyota'

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

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

  • Хранения статических данных или методов, общих для всех экземпляров (например, констант).
  • Реализации утилитарных функций, связанных с конструктором, но не требующих доступа к данным экземпляра.

Например, в классе Math все методы статические и вызываются напрямую через Math, а не через экземпляры.

Вывод: Прямые свойства функций полезны для статических членов, которые не зависят от состояния экземпляра, в то время как свойства в prototype нужны для методов и данных, которые должны быть доступны каждому экземпляру.

Уровень

  • Рейтинг:

    3

  • Сложность:

    4

Навыки

  • JavaScript

    JavaScript

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

#function property

#prototype

#constructor

#instance

#JavaScript

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