JS各种继承

一、通过bind改变this指向来继承

在这里插入图片描述

1.声明两个构造函数,分别是Parent和Child(父与子)
2.在父亲的构造函数上添加一个skill属性,在其原型上添加一个show方法
3.通过实例化Parent,随时可以调用父亲的show方法以及输出父亲的实例化对象p
4.Child构造函数中,通过bind改变Parent的this指向,使之指向Child 并立即执行,达到继承构造函数中的内容的目的,但是并不能继承原型上的内容这里指不能继承show方法!!!
bind改变this指向的方式继承
因为c并没有继承p原型上的show方法,因此会报错c.show并不是一个方法或函数

二、原型继承与原型对象

原型继承与原型对象
1.依旧是之前的Parent、Child两个构造函数,PS:后面我为了方便写,就把Parent写成P…把Child写成C…
2.P…构造函数上仍旧写了skill属性值为“挣钱”,原型上俩方法show和init
3.而C…上只有一个skill属性,值为“花钱”
4.利用对象的深拷贝语法Object.assign():不理解为啥用深拷贝或为什么要深拷贝的,欢迎去找我另一篇博客 深拷贝主要是为了俩构造函数互相不影响
5.经过对象深拷贝,此时C…上就有了P…上所有的属性和方法,包括proto上的show和init
**2021/05/07订正:**这里通过对象深拷贝,继承的是原型上的俩方法,并没有继承P…上的skill属性,猜测当时写的时候,可能思路混乱了,特此订正。
6.C…上重写的init方法当然不会被P…上的所替代,仍旧保持自己的风格,好似再说:不卑不亢,男儿本色!
在这里插入图片描述

PS:通过深拷贝对象的方式的继承只能继承原型中的内容,并不能继承构造函数中的内容

三、原型链继承

原型链的继承
1.前面23行以前的代码中,都是基本操作,23行则是将实例化的P…对象给了C…的原型,这就是原型链的由来必须要能够将原型组成链路结构,才叫原型链,不然怎么叫原型链呢?你们难道不觉得__proto__111__proto__222__proto__这玩意很像一根铁链子吗?
2.26行到30行则是P…的实例化操作
3.从32到36则是C…的实例化操作
4.精髓还是在于P…的实例化给了C…的原型
5.下图给出了清晰的解释:

原型链的继承述
原型链继承的优缺点
1.既可以继承构造函数,又可以继承原型
2.对参数的处理不太友好,语义化不够明显
3.消耗内存,消耗性能

四、混合继承

混合继承
所谓混合继承,就好比创造一门全新的武功,需要吸取百家之所长,增强其杀伤力,减少其不足是一个道理
1.在23行,注释我也已经给出了,我们之前说过,可以利用bind改变this指向能够继承构造函数中的内容这一特点,专门让他继承构造函数中的内容
2.在28行,注释同样给出,我们利用原型继承深拷贝对象,从而继承原型中的属性和方法的目的,PS:这里就是继承了show和init方法,并没有属性可以让他继承
3.什么是快乐星球?那什么是混合继承?混合继承就是我的快乐星球,利用bind继承构造函数中的内容,利用原型继承原型中的内容,这就是混合继承
混合继承
混合继承的优缺点
1.多种方式继承
2.可以传参
3.没有增加原型链,相对来说减少性能消耗

五、ES6新语法extends继承

在这里插入图片描述
ES6新语法继承
新语法描述
1.新语法利用了bind改变this指向和原型链的原理来达到继承的目的

ES6新语法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值