__proto__ 是 object 的一个属性,prototype 是 function 的一个属性。
__proto__ 指向它的构造函数的 prototype, prototype指向一个constructor为该 function 的 object.
所以 __proto__ 也有自己的 __proto__ ,也就是原型链。
原型链
当请求一个对象的属性时,首先会在对象内部寻找,如果不存在,则会到 __proto__ 中查找,如果不存在,就会查找 __proto__ 的 __proto__ ,直到 null 为止。
实例化对象过程
进行 new Foo() 操作会进行以下过程:
- 首先会初始化一个空 {}
- 然后将 {} 的 __proto__ 指向 Foo 的 prototype
- 接着执行 Base.call({}) 将 this 作用域交予 {}