带你搞懂js的原型和原型链-继承【个人总结】

①图文详解版,便于理解,下面有总结版:
一、实例对象(由底部对象发出的两条线段):
线段1:每一个实例对象都指向并来自于构造函数(也可理解为构造函数产生实例对象)
线段2:每一个实例对象都有一个__proto__属性指向构造函数的原型对象
(eg:图中Foo.prototype是Foo的prototype属性,但同时Foo.prototype既是属性,也是一个对象)

二、构造函数所拥有的prototype属性
线段3、5:每个构造函数都有一个prototype属性,此属性也是一个对象

三、原型对象的指向
线段4:prototype原型对象指向(构造函数)object,也来自于这个构造函数(原理同线段1)

四、object原型对象的指向
线段6:为了好理解说直白点,object是所有对象的祖宗,有很多方法,object的原型对象指向null)

也就是说,每一个对象都有原型对象,指向对应的构造函数的 prototype 属性。原型对象prototype也是一个对象,这个对象的所有的属性和方法,都会被构造函数所拥有。
 

每一个实例对象都来自于构造函数,都有一个__proto__属性指向对应构造函数的原型对象
每个构造函数都有一个prototype属性,(这个属性是个对象,叫原型对象)指向对应构造函数的原型对象(比如图中Foo.prototype指向Object.prototype)
而这一系列的原型对象就是所谓的 "原型链"(prototype chain)。也就是当对象要调用某个方法,先去它最近的原型上去找,如果没有找到会继续逐级向下找,这样逐级查找直至找到。这样查找的原型构成了该对象的原型链条

下面来个总结:
原型:①原型分为隐式原型和显式原型。每一个实例对象都来自于构造函数,都有一个隐式原型(__proto__属性)指向构造函数的显式原型(prototype属性)他也是个对象。也有指针,又指向他的显示原型。
注:指向的意思是恒等于
实例对象只有隐式原型,构造函数都有。
原型链: 多个__proto__组成的集合成为原型链

【prototype属性也是个对象,有proto指针,也指向构造函数显示原型。最后指向的是Object()的prototype,object的prototype指向null。(object是所有对象的祖宗,有很多方法)】

也就是当对象要调用某个方法,则会去__proto__中查找,也就是构造函数的显式原型prototype属性中查找,如果没找到,就逐层向上找,最后当查找到Object.prototype,他指向的就是null,如果没有则返回undefined。

插个继承:
下面是构造函数和原型链的组合继承-附图和代码



 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值