Вопрос проверяет понимание механизма прототипного наследования в JavaScript и его практического применения в современной разработке.
Прототипное наследование — фундаментальный механизм JavaScript, лежащий в основе даже синтаксиса class. Каждый объект имеет внутреннюю ссылку [[Prototype]] (доступную через Object.getPrototypeOf или устаревшее __proto__), которая указывает на другой объект. При обращении к свойству движок сначала ищет его в самом объекте, затем в его прототипе, затем в прототипе прототипа и так далее, пока не найдёт или не дойдёт до null.
ClassName.prototype.Array.prototype (осторожно, не рекомендуется в продакшене).class Animal {
constructor(name) { this.name = name; }
speak() { return `${this.name} издаёт звук`; }
}
class Dog extends Animal {
speak() { return `${this.name} лает`; }
}
const dog = new Dog('Рекс');
console.log(dog.speak()); // Рекс лает
console.log(Object.getPrototypeOf(dog) === Dog.prototype); // true
console.log(Object.getPrototypeOf(Dog.prototype) === Animal.prototype); // true
Иногда удобнее работать с прототипами напрямую, без классов:
const animal = {
speak() { return `${this.name} издаёт звук`; }
};
const dog = Object.create(animal);
dog.name = 'Рекс';
dog.speak = function() { return `${this.name} лает`; };
console.log(dog.speak()); // Рекс лает
prototype есть только у функций, а [[Prototype]] — у всех объектов.instanceof или isPrototypeOf.Прототипы стоит применять, когда нужно организовать наследование, сэкономить память на общих методах или расширить поведение существующих объектов. В современном коде чаще используют классы, но понимание прототипов необходимо для отладки, работы с библиотеками и написания эффективного JavaScript.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию