深入浅出的理解js的原型链

什么是原型链

JavaScript是面向对象的,每个实例对象都有一个__proto__属性,该属性指向它的原型对象,这个实例对象的构造函数有一个原型属性prototype,与实例的proto属性指向同一个对象。当一个对象在查找一个属性的时候,自身没有就会根据__proto__向它的原型进行查找,如果都没有,则向它的原型的原型继续查找,直到查到Object.prototype.proto_为null,这样也就形成了原型链。

1、 简单看一下使用构造函数创建对象的原型体现

在这里插入图片描述
字写的太难看,简单看下,嘿嘿
js通过new 构造函数生成一个实例对象,实例对象的__proto__ 指向原型对象,构造函数通过prototype指向原型对象,而原型对象通过cunstructor指回构造函数
在这里插入图片描述通过实例对象的__proto__和构造函数的prototype做比较我们得到的上面如图所示的原型体现,从而衍生出原型链

通过图示以及代码实例我们清楚的认识到通过构造函数生成的实例对象可以通过__proto__指向到构造函数的原型对象。

但是我们也知道通过实例对象可以访问toString/toValues/isPrototypeOf方法,虽然在构造函数中我们没有往原型对象中添加这些方法,所以我们得到了所有函数的原型默认是 Object的实例,那么由此可以得到如下图所示
在这里插入图片描述
那我们就知道构造函数为啥能访问oString/toValues/isPrototypeOf这些方法了,因为这些方法挂载在Object的原型对象上,而所有函数的原型默认是 Object的实例,也就是说我们能通过一条链能访问到这些原型方法,这条链就是原型链。如下图所示
在这里插入图片描述

这就是通过构造函数生成的一条原型链,原型链的找到最顶级为null.
此次分享就到这里,希望能帮到大家
本人的字有点丑,好久不写字了,见谅!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值