Js 各种继承方式总结

本文探讨JavaScript中方法挂在构造函数与原型上的差异,强调原型在资源共享和动态性方面的特点。通过原型链实现继承,但面临共享引用值和无法传参的问题。组合继承和寄生组合继承解决了这些问题,其中Object.create()用于简化继承。原型继承和寄生继承作为两种策略,各有优劣。文章深入解析了JavaScript继承的复杂性和实践技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先让我们从零谈起吧

  1. 方法直接挂在构造函数上,会存在一个问题。就是,每个实例中的方法都是一个新的方法实例,不能够复用。
    因此,原型就应运而生了。
  2. 方法挂在原型上,这样所有的实例共享这些方法。但是,原型上的引用值,也会被所有实例共享,这是原型的一个特点吧。原型还具有动态性,对象创建后,修改原型(增加方法或属性等),该对象访问的是修改后的原型。注意重写原型,会导致重写前创建的对象,与重写后的原型切断关系。

那Js 中怎么实现继承呢

是通过原型链。一个类型的原型是另一个类型的一个实例,这样就构建了原型链。实现了,子类继承父类的属性和方法。

  1. 原型链构建完毕,我们会发现一个问题。与原型问题相似,原型上的引用值被全部实例共享,此外子类实例化时不能向父类构造函数传参。
  2. 解决1中的问题,可以使用构造函数。但是又引入了一个新问题,就是切断了子类的原型链,子类不能继承父类原型上的属性或方法了。
  3. 使用组合继承可以解决2中的问题即使用盗用构造函数和原型链。
  4. 组合继承中,父类型的构造函数需要执行两次。为了提高效率,出现了寄生组合继承。即子类的原型对象通过寄生方式获得。
  5. 原型继承即Object.create(obj),这种继承无需编写子类构造函数,就可以实现继承。
  6. 寄生继承,即是对原型继承的封装,相当于工厂模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值