Проверяет понимание механизма прототипов в JavaScript и того, как через него расширять функциональность объектов без дублирования кода.
В JavaScript каждый объект имеет скрытую ссылку на другой объект — свой прототип. Когда вы обращаетесь к свойству или методу, которого нет у самого объекта, движок ищет его в прототипе, затем в прототипе прототипа и так далее по цепочке. Расширение функциональности через прототип означает, что вы добавляете методы не в каждый экземпляр, а в общий прототип, и все объекты получают к ним доступ.
function User(name) {
this.name = name;
}
// Метод добавляется в прототип, а не в каждый объект
User.prototype.greet = function() {
return `Привет, я ${this.name}`;
};
const alice = new User('Alice');
const bob = new User('Bob');
console.log(alice.greet()); // Привет, я Alice
console.log(bob.greet()); // Привет, я Bob
// Расширяем функциональность позже
User.prototype.sayBye = function() {
return `${this.name} уходит`;
};
console.log(alice.sayBye()); // Alice уходит
Здесь метод greet существует в единственном экземпляре в User.prototype, но доступен обоим объектам. Если бы мы определяли метод внутри конструктора через this.greet = function() {...}, то для каждого пользователя создавалась бы своя копия функции, что расходовало бы память.
Прототипное расширение активно используется во встроенных объектах JavaScript: Array.prototype.map, String.prototype.trim и других. Библиотеки и фреймворки тоже часто добавляют методы в прототипы, чтобы дать всем экземплярам общий функционал. В классах ES6 синтаксис другой, но под капотом работает тот же механизм прототипов.
Итог: расширение через прототип стоит применять, когда нужно дать общее поведение множеству объектов одного типа, сэкономить память и обеспечить единое место для правок. Это базовый инструмент для организации наследования и переиспользования кода в JavaScript.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию