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