@Vladddddd

Почему delete удаляет значения свойства прототипа?

Добрый день! Помогите, пожалуйста, разобраться со следующим кодом:
spoiler
var obj = {
   a:5,
   b:{
	c:10
   }
};

obj.__proto__ = {
   a:10,
   b: {
      c:20
   }
};

console.log(obj);
console.log(obj.__proto__);

delete obj.a;
console.log(obj.a);
console.log(obj);
console.log(obj.__proto__);

delete obj.a;
console.log(obj.a);
console.log(obj);
console.log(obj.__proto__);

delete obj.b;
console.log(obj.b.c);
console.log(obj);
console.log(obj.__proto__);

delete obj.b.c;
console.log(obj.b.c);
console.log(obj);
console.log(obj.__proto__);


Не могу понять, почему 4й delete удаляет значения свойства b прототипа, delete не должен же трогать прототип вообще в этом случае.
  • Вопрос задан
  • 249 просмотров
Решения вопроса 1
rockon404
@rockon404
Frontend Developer
delete не должен же трогать прототип вообще в этом случае
С чего вы так решили?

Третий вызов delete находит свойство b в экземпляре и удаляет его.
Четвертый вызов delete не находит свойство b в экземпляре, спускается по цепочке в прототип, находит там свойство b и удаляет в объекте по ссылке b свойство c. Сам объект b из прототипа через экземпляр удалить нельзя, а любые его свойства можно.
Все по канонам JavaScript.
Почитать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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