// line-1
f1.__proto__ === Foo.prototype // true
// line-2
Foo.prototype === Foo.prototype // true
// line-3
Foo.prototype.constructor === Foo // true
Foo.toString() // function Foo() { console.log('Foo()') }
// line-3.1
Foo.constructor === Function.constructor
Function.constructor.toString() // function Function() { [native code] }
// line-4
Foo.__proto__ === Function.prototype // true
// line-5
Foo.prototype.__proto__ === Object.prototype // true
// line-6
({}).__proto__ === Object.prototype // true
// line-7
// =_=, it's a mistake, same as line-6
// line-8
Object.prototype === Object.prototype // true
// line-9
Object.prototype.constructor === Object // true
Object.toString() // function Object() { [native code] }
// line-10
Object.prototype.__proto__ === null // true
// line-11
Function.prototype.__proto__ === Object.prototype // true
// line-12
Object.__proto__ === Function.prototype // true
// line-13
Function.prototype === Function.prototype // true
// line-14
Function.prototype.constructor === Function // true
Function.toString() // function Function() { [native code] }
// line-15
Function.__proto__ === Function.prototype // true