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, при создании нового, а не мутации, ссылки не обновляются, верно ?
  • Вопрос задан
  • 68 просмотров
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Ткнуть в доку лучше готового к копипасте ответа
P.S. я так понимаю в момент создания new User создается ссылка на тот объект, что в User.prototype, при создании нового, а не мутации, ссылки не обновляются, верно ?
верно
При создании объекта через new Func ссылка из Func.prototype копируется в новый объект.
Так же после Вашего хака перестанет работать оператор instanceof, так как он работает на рекурсивном сравнении этих ссылок.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
Artezio Могилев
от 2 800 до 3 300 $
26 февр. 2021, в 21:56
20000 руб./за проект
26 февр. 2021, в 20:38
3000 руб./за проект