ES6-调用类中的静态方法

ES6 - Call static method within a class

本文关键字:静态方法 调用 ES6-      更新时间:2023-09-26

我有一个类,它对静态方法进行内部调用:

export class GeneralHelper extends BaseHelper{
     static is(env){
          return config.get('env:name') === env;
     }
     static isProd(){
         return GeneralHelper.is('prod');
     }
 }

有没有任何关键字我可以用来替换下面一行中的类名:

GeneralHelper.is('prod');

PHP中有selfstatic等。ES6提供了类似的功能吗?

TY。

如果您从实例内部调用静态函数,那么引用该类的静态函数的正确方法是:

this.constructor.functionName();

从常规ES6类方法调用静态方法

这与在普通对象上调用方法相同。如果您调用GeneralHelper.isProd()方法,则GeneralHelper将在该方法中作为this可用,因此您可以使用

class GeneralHelper {
     static is(env) { … }
     static isProd(){
         return this.is('prod');
     }
}

然而,当方法像往常一样作为回调函数传递时,这将不起作用。此外,当有人从您的类继承isProd并覆盖is时,这可能与显式访问GeneralHelper不同,InheritedHelper.isProd()将产生其他结果。

如果您希望从实例方法调用静态方法,请参阅此处。还要注意,只定义静态方法的类是一个奇怪的类,您可能需要使用普通对象。

这里的两个答案都是正确和好的,但我想在这个问题标题的基础上增加一个细节。

当我看到"ES6-在类中调用静态方法"时,它听起来像是"在类中(从非静态方法)调用一个静态方法"。不要质疑最初提问者在细节中提出的问题。

但对于任何想知道如何从类中的非静态方法调用静态方法的人来说,你可以这样做:

class MyClass {
    myNonStaticMethod () {
        console.log("I'm not static.")
        MyClass.myStaticMethod()
    }
    static myStaticMethod () {
        console.log("hey, I'm static!")
    }
}
MyClass.myStaticMethod() // will log "hey, I'm static!"
const me = new MyClass()
me.myNonStaticMethod() // will log "I'm not static" and then "hey, I'm static!"

其思想是,可以在不创建类的新实例的情况下调用静态方法。这意味着您可以在实例的方法内部调用它,就像在实例外部调用它一样。

同样,我知道这不是问题的细节所要求的,但这可能会对其他人有所帮助。