如果我想在基类中定义一个常量,然后在子类中重写它,该怎么办?
要注意的是,对于我的特定情况,此常量是一个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)
}
方法的格式为
SubCmd1
是否有可能使它起作用? 您可以从-https://jsbin.com/xubijosuro/edit?js,console,output
开始 PS。这是我使用SubCmd2
,const cli = new CliCaseA(name, argsObj)
const usage = cli.Usage()
if (usage) { console.log(`Usage:\n\n${usage}`) process.exit() }
等的方式:
function Modal(props) {
const hide=()=>{
document.querySelector('#modal').style.display='none';
};
return (
<div id = 'modal' className='modal'>
{props.children}
//close button and so on...
</div>
);
}
export default Modal;
答案 0 :(得分:2)
您正在寻找甚至可以在使用new.target
进行super()
调用之前就可以访问的类(或getter或方法)的静态属性:
class MappedCmd extends Cmd {
constructor(name, arg1, arg2 = null) {
const myMap = new.target.getMyMap();
// ^^^^^^^^^^
…
super(name, arg1, arg2)
}
static getMyMap() {
return new Map(); // to be overridden or extended in the subclasses
}
}