使用默认值时调用静态方法

时间:2017-04-27 16:31:52

标签: javascript oop ecmascript-6

使用ES6模块和export default class时如何从同一个类中的另一个方法调用静态方法?我的问题特别指的是何时将类标记为默认值(与es6 call static methods不同)

以下示例说明了如何在不使用默认值时从非静态方法调用静态方法,即Test.staticMethod()

export default class {
    static staticMethod(){
        alert('static');
    }

    nonStaticMethod(){
        // will not work because staticMethod is static.
        // Ordinarily you would use MyClass.staticMethod()
        this.staticMethod();
    }
}

2 个答案:

答案 0 :(得分:4)

如果你敢,你can use this.constructor.…,但更好的解决办法就是给你的班级命名:

export default class MyClass {
    static staticMethod(){
        alert('static');
    }

    nonStaticMethod() {
        // Ordinarily you just use
        MyClass.staticMethod();
    }
}

如果由于某种原因 1 而无法做到这一点,那么还有这个黑客:

import MyClass from '.' // self-reference

export default class {
    static staticMethod(){
        alert('static');
    }

    nonStaticMethod() {
        // Ordinarily you just use
        MyClass.staticMethod();
    }
}

1:我无法想象一个好的

答案 1 :(得分:2)

您可以为导出的类命名并通过辅助名称引用它:

export default class _ {

  static staticMethod(){
      alert('static');
  }

  nonStaticMethod(){
      _.staticMethod();
  }
}