原型与原型链

原型与原型链

概述

每个函数都有一个prototype属性,指向一个对象,而这个对象就是原型对象

对于普通函数来说,该属性基本无用。但是,对于构造函数来说,生成实例的时候,该属性会自动成为实例对象的原型。

每一个对象有自己的原型对象,而原型对象又有自己的原型对象,因此会形成一个原型链,当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,也在该对象的原型上搜寻,以及该对象的原型的原型,依次层层向上搜寻,直到找到一个名字匹配的属性或到达原型链的末尾

下面的图即详细解释了原型链详细的构成

image-20221017143519721

我在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实例、组件实例和他们原型对象之间的关系。后续的文章我也会做详细的讲解


原型与原型链
https://tian-1-2.github.io/typblog/2022/09/13/原型与原型链/
作者
田云鹏
发布于
2022年9月13日
许可协议