原型与原型链
原型与原型链
概述
每个函数都有一个prototype属性,指向一个对象,而这个对象就是原型对象
对于普通函数来说,该属性基本无用。但是,对于构造函数来说,生成实例的时候,该属性会自动成为实例对象的原型。
每一个对象有自己的原型对象,而原型对象又有自己的原型对象,因此会形成一个原型链,当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,也在该对象的原型上搜寻,以及该对象的原型的原型,依次层层向上搜寻,直到找到一个名字匹配的属性或到达原型链的末尾
下面的图即详细解释了原型链详细的构成

我在csdn上看到了一个大佬讲的非常详细,这里推荐一下:https://yuguang.blog.csdn.net/article/details/106555301?spm=1001.2014.3001.5506
道理都懂了,该如何去叙述呢,往下看
接下来就是我对原型链的总结
首先我们先看构造函数与原型对象的原型,构造函数中的prototype属性即显式原型指向其原型对象,
而原型对象中都有一个constructor属性,该constructor属性就会执行该对象的构造函数,
接下来我们加入由构造函数创建的实例对象,而实例对象中都有一个__proto__属性,我们也称为隐式原型,该隐式原型可以直接让实例对象指向该构造函数的原型对象
而原型对象是通过object构造函数生成的(这里和new有关),new创建实例时,new过程中会创建一个新的object对象,而该对象的隐形原型会指向构造函数的的原型对象,
所以该构造函数的原型对象有一个属性__proto__隐形原型指向object的原型对象,而object原型对象和object构造函数又有prototype和constructor相互指向的关系,因此形成了最终的原型链,而这个链条还存在最终点,是因为:Object.prototype 的原型是——null,null 表示“没有对象”,即该处不应该有值。这句话也意味着 Object.prototype 没有原型
这就是一个原型链形成的完整过程。
在后续的学习中许多地方都会涉及到原型链,比如vue实例、组件实例和他们原型对象之间的关系。后续的文章我也会做详细的讲解