Цепочка прототипов — это механизм наследования в JavaScript, при котором объекты могут получать свойства и методы от других объектов. Когда вы обращаетесь к свойству объекта, JavaScript сначала ищет его в самом объекте, а если не находит — идёт по цепочке прототипов вверх, пока не найдёт или не дойдёт до конца.
Цепочка прототипов — это способ, которым JavaScript реализует наследование. Это очень важная концепция, которая лежит в основе работы с объектами.
Каждый объект в JavaScript имеет прототип — другой объект, от которого он наследует свойства:
const obj = {};
console.log(obj.toString); // Метод из прототипаКогда вы обращаетесь к свойству объекта:
const user = { name: 'Иван' };
// user не имеет метода toString, но может его использовать
console.log(user.toString()); // Работает через прототипconst parent = { surname: 'Иванов' };
const child = Object.create(parent);
child.name = 'Петр';
console.log(child.name); // 'Петр' — свойство объекта
console.log(child.surname); // 'Иванов' — из прототипаconst obj = {};
// obj.toString → Object.prototype.toString
// obj.valueOf → Object.prototype.valueOfconst cleanObj = Object.create(null);
// Нет цепочки прототипов
console.log(cleanObj.toString); // undefined// Все массивы имеют методы из Array.prototype
const arr = [1, 2, 3];
console.log(arr.length); // Собственное свойство
console.log(arr.push); // Из Array.prototype// Можно добавить метод всем объектам
Object.prototype.sayHello = function() {
return 'Привет!';
};
const obj = {};
console.log(obj.sayHello()); // 'Привет!'// ❌ Думаем, что toString — свойство объекта
const obj = { name: 'Иван' };
console.log(obj.hasOwnProperty('toString')); // false!
// ✅ Правильное понимание
console.log('toString' in obj); // true — через прототип// ❌ Опасно — влияет на весь код
Array.prototype.myMethod = function() {};
// ✅ Лучше — создавать свои классы
class MyArray extends Array {}Понимание цепочки прототипов помогает лучше понимать, как работают объекты и наследование в JavaScript.
Хотите больше статей для подготовки к собеседованиям? Подписывайтесь на EasyAdvice, добавляйте сайт в закладки и совершенствуйтесь каждый день 💪