js之原型链

大家请看一下图解,方便理解:

js之原型链
想要明白原型链,就必须了解一下原型。
如果不明白__proto__和prototype以及constructor请看这一篇文章:
js之prototype、proto、constructor之间的关系

一:什么是原型链?

js之原型链
图片所圈起来的地方就是一条原型链,
通俗的讲:每一个对象都有一个原型__proto__。该原型也有自己的原型,以此类推,这就构成了如图所示的一条原型链。

:那原型链有什么作用呢?
答:主要作用用于继承。

二:原型链上的查找机制

如果实例对象lwl要调用一个方法,那么怎么查找呢?
假如: Person.prototype对象里储存着一个叫sing的方法,运行 lwl.sing(),它会先查找该对象lwl里是否有这个函数,如果没有,就会在对象lwl里的__proto__ 所指向的原型对象中查找,所以就查找到了。如果Person.prototype对象里没有储存着一个叫sing的方法时,它会在Person.prototype对象里__proto__ 所指向的原型对象中再一次查找,以此类推!

还有一种情况就是:如果lwl对象中有一个sing方法,而Person.prototype对象里也储存着一个sing方法,那该使用哪个sing方法呢?
:就近原则。