Как JavaScript поддерживает ссылку на прототип?

Глядя на ответ на (Как работает цепочка прототипов?), я могу видим, что существует цепочка наследования. Что происходит за кулисами?

Насколько я могу судить, в свойстве прототипа хранится ссылка на объект-прототип? Почему этот объект не включает в себя прототип прототипа и как вместо этого он поддерживает эту ссылку?

var Parent = function() {
	this.name = 'Parent';
}

Parent.prototype.sayHi = function() {
	console.log('hi');
}

var Child = function() {
	this.name = "Child";
}

Child.prototype = new Parent();

console.log(Parent.prototype); // { sayHi: [Function] }
console.log(Child.prototype); // { name: 'Parent' }
console.log(Child.prototype.prototype); // undefined

=============== Ответ снизу ===============

console.log(Parent.prototype); // { sayHi: [Function] }
console.log(Child.prototype); // { name: 'Parent' }
console.log(Child.prototype.__proto__); // { sayHi: [Function] }

person Zach Smith    schedule 29.07.2015    source источник
comment
Это неправильный вывод из вашего кода. Создайте встроенный фрагмент.   -  person Amit    schedule 29.07.2015
comment
он включает в себя прототип прототипа, если вы устанавливаете такую ​​связь. в показанном коде нет привязки Child к Parent, поэтому было бы удивительно, если бы они были связаны для вас...   -  person dandavis    schedule 29.07.2015
comment
Извините, теперь так и есть. Но я все еще получаю тот же результат   -  person Zach Smith    schedule 29.07.2015


Ответы (1)


Почему этот объект не включает в себя прототип прототипа и как вместо этого он поддерживает эту ссылку?

Потому что в вашем примере prototype из Child также является экземпляром Parent, а не другим конструктором. prototype является свойством конструктора, а не свойством каждого отдельного экземпляра.

Существует еще одно свойство, которое делает это для каждого экземпляра, __proto__ свойство, но практически не имеет разумного применения. Спецификация ES6 также требует, чтобы эта функция была реализована только в веб-браузере, а не обязательно в других средах JavaScript.

person Alexander O'Mara    schedule 29.07.2015