@zlodiak

Почему в одном объекте может быть несколько __proto__?

В javascript функции живут отдельно от объектов. Поэтому любой объект может использовать любые функции. При создании функция из конструктора обычно применяется такой способ:
function User(name) {
	this.name = name;
}

User.prototype.hello = function(who) {
	console.log('hello, ' + who.name);
}


Это означает, что при создании экземпляра объекта в его свойство __proto__ записывается ссылка на функцию hello(), которая лежит где-то отдельно. Это понятно.

Но в таком коде:
function User(name) {
	this.name = name;
}

User.prototype.hello = function(who) {
	console.log('hello, ' + who.name);
}

User.prototype.bye = function(who) {
	console.log('bye, ' + who.name);
}


эта ссылка __proto__ должна перезаписаться. И в результате созданный объект будет связан только с функцией bye(). Однако этого не происходит и в реальности экземпляр user() может вызывать и hello(), и bye():
var petya = new User('Петя');

petya.hello(petya);
petya.bye(petya);


Мне это не понятно, объясните пожалуйста

JSFIDDLE
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
dimovich85
@dimovich85 Куратор тега JavaScript
https://u-academy.net/
Вообще prototype это тоже как бы объект, ссылка на родительский объект по идее, и Вы к нему добавили два поля: bye, hello, и ничего не перезатерлось.
Вот почитать
Вот посмотреть, видео не мое, просто тезка.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@RidgeA
Вот тут фундоментальная ошибка.
Это означает, что при создании экземпляра объекта в его свойство __proto__ записывается ссылка на функцию hello(),

В __proto__ будет записан указатель на объект-прототип, где и храняться все функции.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы