浏览器控制台输出的对象结构的原型链怎么和实际数据不一样

用浏览器的控制台打印输出了一个对象的结构,但是结构中的原型链怎么和实际数据不同?(见图)帮忙解答一下

img


img

第一个图:[[prototype]]ECMAScript定义的一个内部属性,我们不能直接访问[[prototype]],但可以通过Object.getPrototypeOf()获取[[prototype]]__proto__是浏览器厂商添加的一个可以直接访问[[prototype]]的属性,所以对于图1,存在Object.getPrototyoeOf(a) === a.__proto__true。其实你的a.__proto__就是在访问[[prototype]],所以a.__proto__.__proto__null

第二个图:理解下下面这段代码吧

Function.prototype.__proto__ === Object.prototype // true

Foo.prototype.__proto__ === Object.prototype // true
foo.__proto__.__proto__ === Foo.prototype.__proto__ // true
foo.__proto__.__proto__ === Object.prototype // true