Почему в одном объекте может быть несколько __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

21 Авг 2019 в 07:00
213 +1
1
Ответы
1

Когда мы определяем методы на прототипе конструктора, каждый метод сохраняется в прототипе объекта. Таким образом, каждый экземпляр объекта будет иметь один и тот же прототип, который содержит все определенные методы.

В вашем примере, когда вы создаете объект petya с помощью конструктора User, ему доступны все методы, определенные на прототипе User, включая hello() и bye(). Это происходит потому, что у каждого экземпляра объекта есть ссылка на один и тот же прототип.

Таким образом, когда вы вызываете методы hello() и bye() на объекте petya, он находит эти методы в его прототипе и успешно выполняет их.

Каждый экземпляр объекта имеет только один прототип, поэтому все методы, определенные на прототипе, доступны для всех экземпляров этого объекта.

20 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир