js实现继承的几种方式

  • 原型链继承
  • 借用构造函数来继承
  • 构造函数+原型链 组合继承
  • 寄生组合式继承
  • 原型式继承
  • 寄生式继承
  • class+extends继承

(1)原型链继承

核心:创建父类实例对象作为子类原型
优点:可以访问父类原型上的方法或属性,实现了方法复用
缺点:创建子类实例时,不能传父类的参数(比如name),
子类实例共享了父类构造函数的属性值,
在这里插入图片描述
在这里插入图片描述

(2)构造函数继承

核心:在子构造函数中调用父构造函数
优点:解决了原型继承的缺点 (使用构造函数来继承可以传父类的参数,可以解决子类共享父类构造函数中属性的问题)
缺点:子类无法访问父类原型中的方法和属性。(这个原型链继承可以解决)
在这里插入图片描述

(3)构造函数+原型链 组合继承

核心:使用原型链实现对原型属性和方法的继承,而通过构造函数来实现对实例属性的继承。
缺点:调用了两次父类构造函数,会存在多一份的父类实例属性。
这里是引用
在这里插入图片描述

(4)寄生组合式继承

组合继承(3)无论什么情况下都会调用两次父类的构造函数。 寄生组合式继承就解决了上述问题,被认为是最理想的继承范式。
在这里插入图片描述

(5)原型式继承

采用原型式继承并不需要定义一个类,传入参数obj,生成一个继承obj对象的对象。
优点:采用原型式继承并不需要定义一个类,传入参数obj,生成一个继承obj对象的对象。当只想单纯地让一个对象与另一个对象保持类似的情况下,原型式继承是完全可以胜任的。
缺点:不是类式继承,而是原型式基础,缺少了类的概念
在这里插入图片描述

(6)寄生式继承

创建一个仅仅用于封装继承过程的函数,然后在内部以某种方式增强对象,最后返回对象。
优点:原型式继承的扩展(其实就是在原型式继承得到对象的基础上,在内部再以某种方式来增强对象,然后返回)
缺点:依旧没有类的概念
在这里插入图片描述

(7)class+extends继承

这里是引用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值