原型链

原型链

当谈到继承时,JavaScript 只有一种结构:对象。每个实例对象( object )都有一个私有属性(称之为 proto )指向它的构造函数的原型对象(prototype )。该原型对象也有一个自己的原型对象( proto ) ,层层向上直到一个对象的原型对象为 null。根据定义,null 没有原型,并作为这个原型链中的最后一个环节,就是原型链继承。



前言

原型链有个缺点就是:在性能方面,原型链会在查找属性上比较耗时,对性能有副作用,这在性能要求苛刻的情况下很重要。另外,试图访问不存在的属性时会遍历整个原型链。因为,在遍历对象的属性时,原型链上的每个可枚举属性都会被枚举出来。要检查对象是否具有自己定义的属性,而不是其原型链上的某个属性


一、图形描述:

在这里插入图片描述


二、图形分析:

原型对象指向构造函数的指针为constructor属性,而构造函数的prototype属性指针指向原型对象,如果构造函数通过new操作符来创建了一个实例对象,那这实例对象可以通过内部指针也就是隐式原型_proto_指向原型对象。_proto_连接的这一系列原型对象就构成了原型链。

构造函数-prototype->原型对象-proto->原型对象-proto-原型对象-proto->…

而由构造函数new出的实例也将由_proto_指向原型对象,相当于父类对子类的一个prototype的指针。


三、属性解释:

prototype: 位于原型链根,每个函数唯一的prototype属性,为显示原型

proto:每个函数实例对象之后都会带有一个_proto_属性,为隐式原型

constructor:prototype原型都会含有一个constructor属性,将指向为它所关联的构造函数


原型链总结:

原型链:获取对象属性时如果本身对象并没有该属性,那将会去他的原型实例_proto_上去找,依次遍历整条原型对象,原型对象->原型对象->…->object.prototype为止。

如果中间找到会停止查找返回该方法。如果一直没找到会返回未定义。

没找到返回为null,因为object.prototype对象也有一个_proto_属性,值为null。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值