Почему этот код работает именно так? Я правильно понимаю? При создании 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)
Так в чём разница?

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

В первом случае, при создании объекта rabbit, его прототипом становится объект Rabbit.prototype, который имеет свойство eats равное true. Затем, когда мы перезаписываем прототип Rabbit.prototype на пустой объект {}, это не влияет на прототип объекта rabbit, который уже был создан.

Во втором случае, когда мы меняем значение свойства eats непосредственно в объекте Rabbit.prototype, это изменение также отражается на объекте rabbit, потому что он продолжает ссылаться на измененный прототип.

Таким образом, в первом случае мы меняем сам прототип объекта, а во втором случае мы изменяем свойство объекта на который ссылается прототип, что приводит к различному поведению при выводе значения свойства eats.

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