@belyaevcyrill

Почему меняется значение поля в обоих прототипах?

Допустим есть некий JavaScript-код:

function User(username) {
  this.username = username;
}

User.prototype.maxage = 110;

function Employee(username, company) {
  User.call(this, username)
  this.company = company;
}

Employee.prototype = User.prototype;
Employee.prototype.maxage = 120;

var tom = new User("Том", 26);
console.log(tom.maxage); // 120


Почему, когда я присваиваю прототипу Employee прототип User, и у прототипа Employee указываю maxage = 120, то у объекта User поле maxage тоже равняется 120 ?

Я понимаю, что при Employee.prototype = User.prototype оба прототипа ссылаются на один и тот же объект, но почему такое происходит? Получается когда для Employee.prototype идёт присвоение User.prototype, то у Employee.prototype появляется по-сути ссылка на объект User.prototype ?
  • Вопрос задан
  • 50 просмотров
Решения вопроса 1
Aetae
@Aetae Куратор тега JavaScript
Тлен
Потому что объекты в javascript присваиваются по ссылке. Это основы основ.
Делай так:
Employee.prototype = Object.create(User.prototype);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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