Вопрос проверяет понимание механизма прототипов в JavaScript, который является основой для реализации наследования и повторного использования кода.
В JavaScript функции являются объектами первого класса, и у них есть специальное свойство prototype. Это свойство существует только у функций (за исключением стрелочных) и автоматически создаётся движком при объявлении функции. Оно играет ключевую роль в механизме прототипного наследования.
Свойство prototype — это обычный объект, который изначально имеет одно собственное свойство constructor, ссылающееся обратно на саму функцию. Этот объект используется как шаблон или "хранилище общих методов" для всех объектов, которые будут созданы с помощью данной функции в роли конструктора.
Когда вы создаёте объект через new Constructor(), внутренняя ссылка [[Prototype]] (доступная через __proto__ или Object.getPrototypeOf()) этого нового объекта устанавливается на объект Constructor.prototype. Таким образом, если свойство не найдено в самом объекте, JavaScript ищет его в цепочке прототипов, начиная с Constructor.prototype.
// Объявляем функцию-конструктор
function Person(name) {
this.name = name;
}
// Добавляем метод в прототип функции Person
Person.prototype.greet = function() {
console.log(`Привет, меня зовут ${this.name}`);
};
// Создаём экземпляр
const alice = new Person('Алиса');
// Метод вызывается из прототипа
alice.greet(); // Вывод: Привет, меня зовут Алиса
// Проверяем связь
console.log(Object.getPrototypeOf(alice) === Person.prototype); // true
console.log(alice.constructor === Person); // true (через цепочку прототипов)Array.prototype, что требует осторожности).Вывод: Свойство prototype функции — это объект, который становится прототипом для всех экземпляров, созданных через new. Этот механизм стоит использовать, когда нужно эффективно разделять методы между множеством объектов одного типа, избегая дублирования кода.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию