Это связано с тем, как наследование работает в JavaScript и с тем, как объекты и функции устроены в языке.
В JavaScript все объекты имеют прототип, который является ссылкой на другой объект. Когда мы обращаемся к свойству или методу объекта, ищется эта ссылка и происходит поиск свойства в прототипе, если оно не найдено в самом объекте.
Все функции являются объектами в JavaScript. У каждой функции также есть свой прототип, который представляет собой объект `Function.prototype`. Методы и свойства, которые мы добавляем в объект `Function.prototype`, становятся доступными для всех функций, созданных в JavaScript.
В то же время, объект `Object.prototype` является прототипом для всех обычных объектов в JavaScript, включая объект `Object` сам по себе. Это означает, что все методы и свойства, определенные в `Object.prototype`, станут доступными для всех объектов в языке, включая `Object`.
Итак, свойство `__proto__` объекта `Object` указывает на прототип функции, потому что функция `Object` сама является объектом и наследует свойства и методы от прототипа объекта `Function.prototype`.
С другой стороны, свойство `__proto__` объекта `Function.prototype` указывает на прототип `Object.prototype`, потому что `Function.prototype` является функцией и наследует свойства и методы от прототипа объекта `Object.prototype`.
Эта цепочка наследования позволяет JavaScript использовать свойства и методы из `Function.prototype` для всех функций и свойства и методы из `Object.prototype` для всех объектов в языке.