简单理解原型链
原型链
原型链就是构造函数,原型对象,和实例的关系
概念
每个构造函数都有一个指向该构造函数的原型对象(prototype)
每个构造函数的原型对象都有一个指向构造函数的指针(constructor)
每个原型内部都有一个指向其构造函数的原型对象的指针(__ proto __)
三者的关系图是这个样子的
这里多说一下为什么在图的右上角会多出来以一个 __ proto __ ,因为原型对象也是一个对象,而每个对象都有一个__ proto __ 属性,所以原型对象也是有 __ proto __ 属性的,不过由于对象的 __ proto __ 是指向其构造函数的原型对象的,而一切的对象都是有Object创建的,所以该 __ proto __ 指向的是Object
这里多说一下__ proto __ 属性,这个属性最早是由火狐浏览器引入的,用来通过实例对象访问原型
为什么会出现原型链?
正常的在一个实例中寻找一个属性的顺序是
- 首先在实例内部找, 如果在该实例内部找不到,进入第二步
- 其次就是进入 __ proto __(即对象原型) 里面找,直到找不到
那么有趣的来了,如果我们将该实例(假设 son1)的构造函数(Son)的原型对象改成另一个实例(son2),那么寻找的的顺序就变成了
son1 --> son2 --> son2.prototype --> … --> Object.prototype
这样就形成了一条链,就是原型链了