Почему этот код работает именно так? Я правильно понимаю? При создании rabbit, в его __proto__ будет записана ссылка на объект Rabbit.prototype?function Rabbit() {} Rabbit.prototype = { eats: true }; var rabbit = new Rabbit(); Rabbit.prototype = {}; //* alert( rabbit.eats ); Почему при перезаписи этого объекта на пустой объект, алер выводит true? ведь __proto__ ссылаеться на уже пустой объектfunction Rabbit(name) {} Rabbit.prototype = { eats: true }; var rabbit = new Rabbit(); Rabbit.prototype.eats = false; alert( rabbit.eats ); А в этом моменте, мы просто меняем свойство объекта на который ссылается __proto__ rabbit, и все работает как нужно. (выводит false) Так в чём разница?
В первом случае, при создании объекта rabbit, его прототипом становится объект Rabbit.prototype, который имеет свойство eats равное true. Затем, когда мы перезаписываем прототип Rabbit.prototype на пустой объект {}, это не влияет на прототип объекта rabbit, который уже был создан.
Во втором случае, когда мы меняем значение свойства eats непосредственно в объекте Rabbit.prototype, это изменение также отражается на объекте rabbit, потому что он продолжает ссылаться на измененный прототип.
Таким образом, в первом случае мы меняем сам прототип объекта, а во втором случае мы изменяем свойство объекта на который ссылается прототип, что приводит к различному поведению при выводе значения свойства eats.
В первом случае, при создании объекта rabbit, его прототипом становится объект Rabbit.prototype, который имеет свойство eats равное true. Затем, когда мы перезаписываем прототип Rabbit.prototype на пустой объект {}, это не влияет на прототип объекта rabbit, который уже был создан.
Во втором случае, когда мы меняем значение свойства eats непосредственно в объекте Rabbit.prototype, это изменение также отражается на объекте rabbit, потому что он продолжает ссылаться на измененный прототип.
Таким образом, в первом случае мы меняем сам прототип объекта, а во втором случае мы изменяем свойство объекта на который ссылается прототип, что приводит к различному поведению при выводе значения свойства eats.