es6-一个class类如何继承多个class类(笔记)

需求:突然要撸node的sdk,根据大的功能组拆分成小的功能模块js。

但是导出的时候要统一为一个入口。。

遂,开刨
复制代码

es6默认classextends没法继承多个。 就是没办法直接

class A extends B,C{}
复制代码

所以,使用简易mixins来做一个骚操作

这里是node的写法(非import)。使用的是require

入口js:index.js

'use strict'
const A = require('./A.js')
const B = require('./B.js')
const C = require('./C.js')

const copyProperties = (target,source)=>{ //加一个拷贝函数,用来拷贝传入的所有class的静态,及其prototype。
    Object.getOwnpropertyNames(source).concat(Object.getOwnpropertySymbols(source)).forEach((prop)=>{
    // 过滤条件
        if(!prop.match(/^(?:constructor|protype|arguments|name))){
            Object.defineProperty(target, prop, Object.getOwnPropertyDescriptor(source, prop))
        }
    })
}

// 创建Mixins主体
const Mixins = (BaseClass, ...mixins)=>{
    // 创建一个基础Base。将其他mixin与其绑定
    class Base extends BaseClass{
        constructor(...props){
            super(...props)
        }
    }
    // 将其余需要被继承的class 与Base绑定。其类及其prototype
    mixins.forEach((mixin) => {
        copyProperties(Base, mixin)
        copyProperties(Base.prototype, mixin.prototype)
    })
    return Base
}

class Demo extends Mixins(A,B,C)

//导出整个函数,Demo中含有其他class中的方法及其属性
module.exports = Demo

复制代码

A.js

class A extends Some{
    constructor(config) {
        super(config)
      }
}
module.exports = A
复制代码

B.js

class B{}
module.exports = B
复制代码

C.js

class C{}
module.exports = C
复制代码

A.jsB.jsC.js中内容不重要。。。。

如果是js写法。就把上述node写法改一下即可。

如果你是谷歌搜索,可以 nodejs -xxx.com即可屏蔽你不想看到的链接被搜索出来。。

打完收工。

才疏学浅,此文仅做笔记参考。
复制代码

猜你喜欢

转载自juejin.im/post/7033739967143215111
今日推荐