В 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