原型链问题就是根据 构造函数的prototype属性 与 其实例的__proto__属性 指向同一个obj空对象,来建立起原型链的,但是难点在于理清楚 构造与实例的关系。下图是原型链图。
1、Foo(),Object(),Function()这三个构造函数,是通过构造函数Function()构造而来,所以Foo(),Object(),Function() 是 Function()的实例对象,因此Foo(),Object(),Function()的__proto__属性,都指向Function.prototype
2、f1,O1分别是Foo(),Object()的实例对象,因此f1,O1的__proto__属性分别指向Foo.prototype和Object.prototype
3、所有函数的原型对象都是一个Object空对象,因此Function.prototype实际上也是一个Object实例对象,所以Function.prototype.__ptoro__指向构造Function.prototype这个Object空对象的prototype,即 Object.prototype,同理:Foo.prototype.__ptoro__指向构造Foo.prototype这个Object空对象的prototype,即 Object.prototype.