需求:突然要撸node的sdk,根据大的功能组拆分成小的功能模块js。
但是导出的时候要统一为一个入口。。
遂,开刨
复制代码
es6
默认class
的extends
没法继承多个。 就是没办法直接
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.js
、B.js
、C.js
中内容不重要。。。。
如果是js写法。就把上述node
写法改一下即可。
如果你是谷歌搜索,可以 nodejs -xxx.com
即可屏蔽你不想看到的链接被搜索出来。。
打完收工。
才疏学浅,此文仅做笔记参考。
复制代码