Задать вопрос
alex4answ
@alex4answ

Почему при замене prototype не меняется поведение объектов?

Добрый день, не знаю как, в полуночном бреду я поймал себя на полном непонимании этого примера:
function User() {}
User.prototype = {
  isAdmin: () => true,
  admin: true,
};

const user = new User();

User.prototype = {
  isAdmin: () => false,
  admin: false,
};

console.log(user.isAdmin()); // true


Почему ? Ведь я изменил прототип User

Когда я меняю не весь объект-прототип, а мутирую его:
User.prototype.isAdmin = () => false;
User.prototype.admin = false;


То все работает, почему ?

P.S. я так понимаю в момент создания new User создается ссылка на тот объект, что в User.prototype, при создании нового, а не мутации, ссылки не обновляются, верно ?
  • Вопрос задан
  • 187 просмотров
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    JavaScript
    3 месяца
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик расширенный
    13 месяцев
    Далее
  • Академия Eduson
    Fullstack-разработчик на JavaScript
    11 месяцев
    Далее
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
P.S. я так понимаю в момент создания new User создается ссылка на тот объект, что в User.prototype, при создании нового, а не мутации, ссылки не обновляются, верно ?
верно
При создании объекта через new Func ссылка из Func.prototype копируется в новый объект.
Так же после Вашего хака перестанет работать оператор instanceof, так как он работает на рекурсивном сравнении этих ссылок.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы