1.js中每個實(shí)例(object)都有一個私有屬性_proto_指向他的構(gòu)造函數(shù)原型對象(prototype).該原型對象也有一個自己的原型對象(_proto_),層層向上知道一個對象的原型為null,這是原型鏈中的最后一個環(huán)節(jié)

鏈圖

測試代碼

打印的結(jié)果
首先,GU的構(gòu)造函數(shù)是Fun()。所以:
GU._ _ proto _ _=== Fun.prototype
又因?yàn)镕oo.prototype是一個普通的對象,它的構(gòu)造函數(shù)是Object,所以:
Fun.prototype._ _ proto _ _=== Object.prototype
通過上面的代碼,我們知道這個toString()方法是在Object.prototype里面的,當(dāng)調(diào)用這個對象的本身并不存在的方法時,它會一層一層地往上去找,一直到null為止。
所以當(dāng)GU調(diào)用toString()時,JS發(fā)現(xiàn)fn中沒有這個方法,于是它就去Fun.prototype中去找,發(fā)現(xiàn)還是沒有這個方法,然后就去Object.prototype中去找,找到了,就調(diào)用Object.prototype中的toString()方法。
這就是原型鏈,GU能夠調(diào)用Object.prototype中的方法正是因?yàn)榇嬖谠玩湹臋C(jī)制。