1.js中每个实例(object)都有一个私有属性_proto_指向他的构造函数原型对象(prototype).该原型对象也有一个自己的原型对象(_proto_),层层向上知道一个对象的原型为null,这是原型链中的最后一个环节
首先,GU的构造函数是Fun()。所以:
GU._ _ proto _ _=== Fun.prototype
又因为Foo.prototype是一个普通的对象,它的构造函数是Object,所以:
Fun.prototype._ _ proto _ _=== Object.prototype
通过上面的代码,我们知道这个toString()方法是在Object.prototype里面的,当调用这个对象的本身并不存在的方法时,它会一层一层地往上去找,一直到null为止。
所以当GU调用toString()时,JS发现fn中没有这个方法,于是它就去Fun.prototype中去找,发现还是没有这个方法,然后就去Object.prototype中去找,找到了,就调用Object.prototype中的toString()方法。
这就是原型链,GU能够调用Object.prototype中的方法正是因为存在原型链的机制。