Подтвердить что ты не робот

ES6 - вызов статического метода в классе

У меня есть этот класс, который выполняет внутренний вызов статического метода:

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

     static isProd(){
         return GeneralHelper.is('prod');
     }
 }

Есть ли какие-либо ключевые слова, которые я могу использовать для замены имени класса в строке ниже:

GeneralHelper.is('prod');

В PHP есть self, static и т.д. Предоставляет ли ES6 что-то похожее на них?

TY.

4b9b3361

Ответ 1

Это то же самое, что вызов метода на обычном объекте. Если вы вызываете метод GeneralHelper.isProd(), метод GeneralHelper будет доступен как this в методе, поэтому вы можете использовать

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

Это, однако, не будет работать, когда метод передается как функция обратного вызова как обычно. Кроме того, он может отличаться от прямого доступа к GeneralHelper, когда кто-то наследует isProd из вашего класса и перезаписывает is, InheritedHelper.isProd() приведет к другим результатам.

Если вы хотите вызвать статические методы из методов экземпляров, см. здесь. Также обратите внимание, что класс, который определяет только статические методы, является нечетным, вы можете использовать простой объект.

Ответ 2

если вы вызываете статическую функцию из экземпляра, правильный способ ссылаться на статическую функцию класса:

this.constructor.functionName();

es6 вызов статических методов

Ответ 3

Оба ответа здесь правильные и хорошие, но я хотел бы добавить дополнительную деталь, основанную на этом вопросе.

Когда я увидел "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!"

Идея состоит в том, что статический метод можно вызвать без создания нового экземпляра класса. Это означает, что вы можете вызвать его внутри метода экземпляра так же, как вы его вызывали за пределами экземпляра.

Опять же, я знаю, что не то, о чем просила деталь вопроса, но это может быть полезно другим людям.