Иваннн,
Я вот не понимаю, чего вы хотите этим добиться, доказать что спецификация неправильная или что?
Не знаю даже как вам объяснить, конкретный пример в спецификации сейчас искать не хочется.
Я вот хотел вам сейчас рассказать как строится всё архитектура пространства в JavaScript, но вовремя увидел, что вы уж совсем намудрили.
fo.constructor.prototype===fo.constructor.prototyp e.constructor.prototype
Это тоже самое что
fo.constructor.prototype === fo.constructor.prototype
Естественно тут замкнутый круг, вы здесь ни разу не идёте по цепочке прототипов, а просто по кругу - от прототипа конструктора, к самому конструктору и опять по новой.
Правильная цепочка прототипов выглядит так:
alert((function(){}).prototype.__proto__ === Object.prototype) // true
alert(Object.prototype.__proto__)
В общем вы путаете свойство prototype у конструктора и свойства __proto__ у объекта, которое как раз и указывает на свойство prototype конструктора. В следствии чего __proto__.__proto__ будет указывать на родительский прототип. А __proto__.constructor.prototype указывает на само себя.