关于原型链的笔记

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中的方法正是因为存在原型链的机制。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容