ES6,必须在访问“ this”并在派生类中定义常量之前调用super

时间:2019-02-09 21:11:21

标签: javascript ecmascript-6

如果我想在基类中定义一个常量,然后在子类中重写它,该怎么办?

要注意的是,对于我的特定情况,此常量是一个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

SubCmd2getMyMap()都需要定义自己的this版本,以便在访问getMyMap()之前在基础构造函数中使用。

getMyMap() { return new Map() .set("name1", arg11, arg12) .set("name2", arg21, arg22) } 方法的格式为

SubCmd1

是否有可能使它起作用? 您可以从-https://jsbin.com/xubijosuro/edit?js,console,output

开始

PS。这是我使用SubCmd2const 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;

1 个答案:

答案 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
  }
}