一文让你理解Javascript中的原型和原型链

导文

很多新人朋友,甚至有工作一段时间的朋友,都很容易把Javascript中的原型和原型链搞混,甚至不清楚它们之间是什么关系。今天看完这篇文章你就明白了,我这边尽量使用通俗的话语给大家表述。

实例、构造函数、原型对象的三角关系

大家以往接收到的知识都是实例、构造函数、原型对象是三角关系,但是不清楚他们之间又是什么存在的;前段时间看到一个博主的视频以及红宝书上的知识,这种就很好理解,下面我们先上一张图。
在这里插入图片描述
首先我们要明白,实例、构造函数、选型对象是三个不同的对象。首先说实例,它是通过new关键字实现的,new关键字的第一个就是在内存中创建一个新对象,那么这就和构造函数属于不同的对象了, 那么接下来原型对象和构造函数这两者也是不同的对象。我们可以通过下面的代码来看看是不是如上图所示。

function Person() {}
const Person1 = new Person()
console.dir(Person)
console.dir(Person1)

首先打印构造函数Person,不难发现,通过prototype就能访问到它的原型对象,而原型对象上的constructor又指回了构造函数Person。
在这里插入图片描述
打印实例Person1,不难发现,实例是一个对象,打开就只有原型对象, 通过展开原型对象,在原型对象上的constructor就指向的构造函数Person。
在这里插入图片描述

原型链

通过上述描述的,我们知道每一个构造函数都有一个原型对象,原型有一个属性(prototype)指向构造函数,实例也有一个内部指针指向原型。而我们通过__proto__就能获取到这个原型, 那么原型上又会有这么一个指针指向另外一个原型,如此往复向前,那么就形成了一条链,就是所谓的原型链。原型链当找上去时,最顶层的原型对象就是null。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

通过上面三张图,就可以看出原型链的情况。

总结

这里我们需要明白:
1.实例、原型对象、构造函数属于三个不同的对象;
2.实例和构造函数没有必然的联系,都是通过原型对象进行联系起来的;
3.原型对象本身有一个指针指向另外一个原型,如此就形成了一条原型链;
4.查找到最顶层时就是null。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一心就想回农村

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值