1. Во цепи объектов прототипов лежат дефолтные свойства и методы. По цепи прототипов эти свойства и методы передаются ("стекают вниз") объектам, которые из элементов документа создаются в процессе анализа страницы (объекты p, div....).
2. В объекты p, div.... запихиваются свойства, которые создаются из одноименных атрибутов при анализе документа (надо правило верблюжьей нотации соблюдать при обращении). Эти свойства перекрывают некоторые дефолтные свойства, идущие по цепи прототипов. Это и определяет внешний вид документа.
3. На самом деле, во всех объектах-прототипах сидят не "просто свойства" (типа name:1), а геттеры и сеттеры (ФУНКЦИИ) ,которые имитируют свойство и позволяют "РАССЧИТАТЬ СВОЙСТВО НА ЛЕТУ" при, например, обращении к нему (или при изменении свойства) в коде. А ДЛЯ ФУНКЦИЙ ВАЖЕН КОНТЕКСТ ИСПОЛНЕНИЯ - ИЗНУТРИ КАКОГО ОБЪЕКТА ФУНКЦИЯ ЧЕРЕЗ ТОЧКУ ВЫЗЫВАЕТСЯ, так как в функциях куча ключевых слов this может быть. Поэтому попытка вызвать "типа свойство", например,
document.getElementById("red").__proto__.parentNode;
, а на самом деле это это вызов функции-геттера приведет к тому, что функция-геттер parentNode вызывается изнутри не того объекта, изнутри которого через точку она должна вызываться (контекст не тот). Поэтому выдаст illegal invocation.