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

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

Войти через центр авторизации
Похожие вопросы