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