Если я хочу определить константу в базовом классе, а затем переопределить ее в подклассах, как мне это сделать?
Уловка в том, что для моего конкретного случая эта константа new Map()
и результат будет проверен во время конструктора:
class Cmd0 {
constructor(name, arg1, arg2 = null) {
this.name = name;
this.arg1 = arg1;
this.arg2 = arg2;
}
. . .
}
class Cmd extends Cmd0 {
constructor(name, arg1, arg2 = null) {
myMap = Somehow.getMyMap() // defined in sub-classes
if (!myMap.has(name)) { super(null, null, null); return } // fail the constructor
super(name, arg1, arg2)
}
}
class SubCmd1 extends Cmd {
Usage() {
if (this.name) return null
else return "cmd sub1 bla bla bla"
}
}
class SubCmd2 extends Cmd {
Usage() {
if (this.name) return null
else return "cmd sub2 bla bla bla"
}
}
И SubCmd1
, и SubCmd2
должны определить свою собственную версию getMyMap()
для использования в базовом конструкторе, прежде чем this
сможетбыть доступным.
Метод getMyMap()
будет иметь формат,
getMyMap() {
return new Map()
.set("name1", arg11, arg12)
.set("name2", arg21, arg22)
}
Можно ли как-нибудь заставить его работать?Вы можете начать с - https://jsbin.com/xubijosuro/edit?js,console,output
PS.Вот как я использую SubCmd1
, SubCmd2
и т.д:
const cli = new CliCaseA(name, argsObj)
const usage = cli.Usage()
if (usage) { console.log(`Usage:\n\n${usage}`) process.exit() }