我得到了关于 js 扩展系统的想法。通过阅读以下代码会更容易理解我的意思
在 moduleA.js 我有 Frame 类
class Frame{ // contains frame info
static Predefined_Paramters_Pattern = [1,2,3,4]
constructor(someParameters = {variable1=...,variable2=...,tag = 0}){
//do something
this.someParamtersPattern = someParamters
}
nextFrame(){
// for example
// when i call nextFrame it 'll construct 4 subclasses
// base on [this] constructor paramaters
// constructorParmatersPattern = {variable1=...,variable2=...,tag= 1 or 2 or 3 or 4}
// this code may looks meaningless
// but i just wanna make this a lot easier to be comprehended what i mean
// and avoid stucking into a complex business logic
Frame.Predefined_Paramters_Pattern.forEach(e=>{
// create sub class somehow
let type = this.type
this.someParamtersPattern.tag = e
let constructorParmatersPattern = this.someParamtersPattern
// if i use eval(`new ${type}(${constructorParmatersPattern })`)
// the browser will throw a error looks like 'SubFrame1 is not define'
})
}
}
export {Frame}
在 moduleB.js 我有 SubFrame1 类
import {Frame} from './moduleA.js'
class SubFrame1 extends Frame{
constructor(somePramaters){
//do something
super(somePramaters)
//do something
this.type = 'SubFrame1'
}
}
export {SubFrame1}
现在我想要实现的是,当我调用时new SubFrame1().nextFrame(),它会自动创建几个子帧,这些子帧类似于我创建的子帧。我可以为其构造函数的参数定义一些模式。所以无论我有多少子类,只要它们扩展了 Frame,那么它们在调用.nextFrame().
但问题是我不希望在我的原始类中有一个 SubFrame1 类或 SubFrame1,SubFrame2,...,SubFrame3 类的引用。
像这个
import {SubFrame1} from './subframe1.js'
import {SubFrame2} from './subframe2.js'
......
import {SubFrameN} from './subframen.js'
class Frame{
......
}
我几乎是 javascript 的新手,但在学校我被告知要编写代码,以便我可以重用它们并减少冗余代码,任何帮助或更正都会很棒