@dmitry-toster

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

Посмотрите на код и на комментарии к нему.

function Car(color) {
  this.color = color;
}

const bmw = new Car('white');
Car.prototype.gear = 1;

console.log(bmw); // {color: "white"} -> свойства gear у объекта нет, оно в прототипе
++bmw.gear // по идеи меняем свойство у прототипа
console.log(bmw); // {color: "white", gear: 2} -> а вот теперь оно есть у объекта. WTF !?
console.log(Car.prototype.gear); // 1

Причем не важно, используем ли мы префиксную форму или обычную.
  • Вопрос задан
  • 119 просмотров
Решения вопроса 2
console.log(bmw.gear) // будет 1, т.к. сначала идет обращение в тело объекта, потом в его прототип.
console.log(bmw); // На этом этапе gear в прототипе.
++bmw.gear // при изменении gear ОБЪЕКТА, свойство наследуется из прототипа и присваивается непосредственно телу объекта.
console.log(bmw.gear); // 2 - это bmw.gear 
console.log(Car.prototype.gear); // 1 - это прототип.


В шаге 2 ты меняешь свойство не у прототипа, а у объекта bmw.
Ответ написан
Комментировать
Lynn
@Lynn
nginx, js, css
Потому что присваивание свойства объекту всегда изменяет только сам объект. А инкремент это просто короткий способ записать присваивание.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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