js原型链(详细图解)

原型链

原型链就是构造函数,原型对象,和实例的关系

概念

每个构造函数都有一个指向该构造函数的原型对象的指针(prototype)

每个构造函数的原型对象都有一个指向构造函数的指针(constructor)

每个原型内部都有一个指向其构造函数的原型对象的指针(__ proto __)

三者的关系图是这个样子的
在这里插入图片描述

这里多说一下为什么在图的右上角会多出来以一个 __ proto __ ,因为原型对象也是一个对象,而每个对象都有一个__ proto __ 属性,所以原型对象也是有 __ proto __ 属性的,不过由于对象的 __ proto __ 是指向其构造函数的原型对象的,而一切的对象都是由Object创建的,所以该 __ proto __ 指向的是Object

这里多说一下__ proto __ 属性,这个属性最早是由火狐浏览器引入的,用来通过实例对象访问原型

为什么会出现原型链?

​ 正常的在一个实例中寻找一个属性的顺序是

  1. 首先在实例内部找, 如果在该实例内部找不到,进入第二步
  2. 其次就是进入 __ proto __(即对象原型) 里面找,直到找不到

​ 那么有趣的来了,如果我们将该实例(假设 son1)的构造函数(Son)的原型对象改成另一个实例(son2),那么寻找的的顺序就变成了

son1 --> son2 --> son2.prototype --> … --> Object.prototype

这样就形成了一条链,就是原型链了
下面是图解
在这里插入图片描述

  1. 任何函数都是由 Function 构造出来的
  2. 函数的constructor属性都是继承自该函数的构造函数的原型 (eg: Person的constructor属性就是继承自 Function的prototype)
  3. 任何原型都是对象, 都是由Object构造的
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值