Я смотрел на этот ответ некоторое время, и я не могу обвести вокруг него голову: https://stackoverflow.com/a/23699009/3658800.Почему запись свойств не связана с цепочкой прототипов в Javascript?
Резюмируя:
только свойство считывает поиск по цепочке прототипов, не пишет. Итак, когда вы установили
myObject.prop = '123';
Он не смотрит вверх по цепочке, но при установке
myObject.myThing.prop = '123';
есть тонкое чтение происходит в этой операции записи, которая пытается искать myThing прежде чем писать в его опору. Вот почему запись в object.properties из дочернего объекта происходит у объектов родителя.
Я в основном прошу кого-то уточнить эту операцию «тонкого чтения». Сначала оценивается myObject.myThing, возвращая ссылку на объект myThing (который затем имеет свой набор свойств «prop»)? Есть ли какой-то источник, где я могу обосновать это (Mozilla, исходный код Javascript и т. Д.)?
js всегда будет смотреть вверх направо, минус одна точка. когда он не может этого сделать, вы получаете ошибку; 'document.xx' в порядке, чтобы попытаться прочитать, потому что от 2-го до правого сегмента является законным. 'document.xx.yy' будет' throw', потому что 'document.xx' является _not_ legal. То же самое относится к любому методу точек, будь то все реквизиты, все протосы или микс. Понятно, почему установка прототипа из пути экземпляра была бы плохой идеей, поэтому JS использует только прототип для инициализации и фасада. – dandavis
Простой ответ: «потому что они просто не делают». Установка значения свойства объекта всегда влияет только на целевой объект. – Pointy
Я думаю, что этот ответ говорит о проблемах при наследовании от вложенных объектов (https://stackoverflow.com/questions/10131052/crockfords-prototypal-inheritance-issues-with-nested-objects/), т. Е. Когда ' .myThing' наследуется, он будет общим (неожиданно). – Bergi