В этой статье поговорим, о неявном замещении. Пройдемся по коду и посмотрим, что тут происходит: 1. Создается объект obj со свойством a. 2. Инициализируем переменную myObj которая является созданным объектом на основе obj. 3. В консоли выводится свойство a для объекта obj и myObj. После того как быстро просмотрели, что тут происходит, давайте копать глубже. У нас есть объект myObj, но если посмотреть существует ли у него свойство a, консоль скажет, что нет. Однако, если мы сделаем инкремент для свойства а в myObj и выведем чему равно само свойство, произойдет магия. Исходя из картинки видно, что в myObj появилось уже собственное свойство a и оно равно 3. Это всё происходит потому, что операция myObj.a++; - это тоже самое, что и myObj.a = myObj.a + 1; В результате чего гетер ([[GET]]) ищет в цепочке [[prototype]] свойство а, после того как находит его он возвращает число 2 из obj.a, увеличивает его на 1 и операция сеттер ([[PUT]]) замещает свойство а в myObj и получается, что myObj.a ==