Опубликовано:
Что такое цепочка прототипов в JavaScript
Источник: «What is Prototype Chaining in JavaScript»
Цепочка прототипов — это механизм в JavaScript, позволяющий объектам наследовать свойства и методы других объектов, имея общий прототип. В JavaScript каждый объект имеет связанный с ним прототип объекта, и эти прототипы образуют цепочку. Когда свойство или метод не найдены в объекте, JavaScript просматривает цепочку прототипов, чтобы найти его в прототипе объекта или в прототипах его предков.
Вот как работает цепочка прототипов:
Прототипы объекта:
- Каждый объект в JavaScript связан с прототипом объекта.
- Прототип объекта сам является обычным объектом и может иметь свой прототип.
Цепочка прототипов:
- Когда вы обращаетесь к свойству или методу объекта, JavaScript сначала проверяет, есть ли у объекта это свойство или метод.
- Если свойство или метод не найдены в объекте, JavaScript просматривает цепочку прототипов.
Наследование:
- Если свойство или метод не найдены в непосредственном прототипе, JavaScript продолжает поиск в прототипе прототипа (и так далее), образуя цепочку прототипов.
- Этот процесс продолжается до тех пор, пока свойство или метод не будут найдены или пока не будет достигнут конец цепочки прототипов.
Object.create()
:
- Метод
Object.create()
часто используется для создания объектов с заданным прототипом. - Этот метод создаёт новый объект с указанным прототипом, устанавливая прямую связь между объектом и его прототипом.
Приведём простой пример:
// Прототип Объекта
const animal = {
makeSound: function() {
console.log('Generic Animal Sound');
}
};
// Объект с Прототипом
const dog = Object.create(animal);
dog.bark = function() {
console.log('Woof! Woof!');
};
// Объект с Прототипом
const cat = Object.create(animal);
cat.meow = function() {
console.log('Meow! Meow!');
};
// Использование объектов
dog.makeSound(); // Наследуется из прототипа
dog.bark(); // Определяется объектом
cat.makeSound(); // Наследуется из прототипа
cat.meow(); // Определяется объектом
В данном примере dog
и cat
являются объектами со своими собственными свойствами (bark
и meow
), но они также наследуют метод makeSound
от общего прототипа animal
. Таким образом, образуется цепочка прототипов: dog
и cat
наследуют от animal
, а сам animal
может иметь собственный прототип, образуя цепочку прототипов.
Важно отметить, что цепочка прототипов является динамической, и изменения прототипа объекта немедленно отражаются на объектах, которые от него наследуются. Этот механизм лежит в основе прототипного наследования JavaScript.