Understand the Prototype Chain

Все объекты в JavaScript (за некоторыми исключениями) имеют prototype . Кроме того, сам prototype объекта является объектом.

функция Bird (name) {
this.name = name;
}

тип Bird.prototype; // => объект
Поскольку prototype является объектом, prototype может иметь свой собственный prototype ! В этом случае prototype Bird.prototype является Object.prototype :
Object.prototype.isPrototypeOf (Bird.prototype);
// возвращает true
Как это полезно? Вы можете вспомнить метод hasOwnProperty из предыдущего hasOwnProperty :
пусть утка = новая птица («Дональд»);
duck.hasOwnProperty ( "имя"); // => true
Метод hasOwnProperty определен в Object.prototype , к которому можно получить доступ с помощью Bird.prototype , к которому затем можно получить доступ duck . Это пример цепи prototype . В этой prototype цепочке Bird является supertype для duck , а duck - subtype . Object - это supertype как для Bird и для duck . Object - это supertype для всех объектов в JavaScript. Поэтому любой объект может использовать метод hasOwnProperty .

Измените код, чтобы показать правильную цепочку прототипов.