ES6 模式下的多继承实现

本文探讨了在ES6环境下遇到的多继承问题。由于ES6的class不直接支持多继承,作者通过阅读阮一峰老师的博客找到解决方案,利用特定的继承代码成功创建了继承链。然而,super()函数无法传递参数,通过调整代码后问题得到解决。然而,实际应用中发现mix函数在复制原型链时未进行深度拷贝,导致无法正确继承上层父类,作者计划对此进行改进。
摘要由CSDN通过智能技术生成

问题产生:

继承链如下:

在这里插入图片描述
我的Dog对象实现了Animal类的属性,但是我同时想继承Friendly类。获取分享属性。

问题解决

实际上ES6的 class并不能实现多继承。我无法通过这种形式实现多继承:
在这里插入图片描述
网上找了许多mixmin的思路和想法,最终在阮一峰老师的博客内找到了解决方案:

function mix(...mixins) {
  class Mix {
    constructor() {
      for (let mixin of mixins) {
        copyProperties(this, new mixin()); // 拷贝实例属性
      }
    }
  }

  for (let mixin of mixins) {
    copyProperties(Mix, mixin); // 拷贝静态属性
    copyProperties(Mix.prototype, mixin.prototype); // 拷贝原型属性
  }

  return Mix;
}

function copyProperties(target, source) {
  for (let key of Refl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值