Прототип наследования - оформление [дубликат]

На этот вопрос уже есть ответ здесь:

Члены объекта Javascript, которые прототипируются в виде массивов, становятся общими для всех экземпляров класса 3 ответа

Итак, у меня есть эти 2 примера из javascript.info:

Пример 1:

var animal = {
  eat: function() {
    alert( "I'm full" )
    this.full = true
  }
}

var rabbit = {
  jump: function() { /* something */ }
}

rabbit.__proto__ = animal 

rabbit.eat() 

Пример 2:

function Hamster() {  }
Hamster.prototype = {
  food: [],
  found: function(something) {
    this.food.push(something)
  }
}

// Create two speedy and lazy hamsters, then feed the first one
speedy = new Hamster()
lazy = new Hamster()

speedy.found("apple")
speedy.found("orange")

alert(speedy.food.length) // 2
alert(lazy.food.length) // 2 (!??)

Начните с примера 2: когда код достигнетspeedy.foundне находитfound недвижимость вspeedyи вот он взбирается на прототип и меняет его там. Вот почемуfood.length одинаково для обоих хомяков, другими словами у них есть тот же самый живот.

Из этого я понимаю, что при написании и добавлении нового свойства, которое не существует, интерпретатор будет идти по цепочке прототипов до тех пор, пока не найдет свойство, а затем не изменит его.

НО в примере 1 происходит что-то еще:
мы бежимrabbit.eat, который меняетсяrabbit.full. full свойство нигде не найдено, поэтому оно должно идти по цепочке прототипов к (объекту ??), и я не уверен, что здесь происходит. В этом примере свойствоfull изrabbit создается и изменяется, в то время как в первом примере он идет вверх по цепочке прототипов, потому что не может найти свойство.

Я в замешательстве и не понимаю, почему это происходит.

Ответы на вопрос(2)

Ваш ответ на вопрос