web-dev-qa-db-fra.com

ES6 - Appel d'une méthode statique dans une classe

J'ai cette classe qui fait un appel interne à une méthode statique:

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

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

Existe-t-il des mots-clés que je peux utiliser pour remplacer le nom de la classe dans la ligne ci-dessous:

GeneralHelper.is('prod');

Dans PHP, il y a self, static, etc., etc. Est-ce que ES6 fournit quelque chose de similaire à cela?

TY.

62
Shlomi Sasson

si vous appelez la fonction statique depuis une instance, la bonne façon de faire référence à la fonction statique de classe est la suivante:

this.constructor.functionName();

es6 méthodes d'appel statiques

59
Otto Nascarella

C'est la même chose que appeler une méthode sur un objet ordinaire . Si vous appelez la méthode GeneralHelper.isProd(), le GeneralHelper sera disponible en tant que this dans la méthode, vous pourrez donc utiliser

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

Cela ne fonctionnera cependant pas lorsque la méthode sera transmise comme une fonction de rappel, comme d'habitude . En outre, cela peut être différent d’accéder explicitement à GeneralHelper lorsque quelqu'un hérite de isProd de votre classe et écrase is, InheritedHelper.isProd() produira d’autres résultats.

Si vous souhaitez appeler des méthodes statiques à partir de méthodes d'instance, voir ici . Notez également qu'une classe qui ne définit que des méthodes statiques est une oddball. Vous pouvez également utiliser un objet brut.

40
Bergi

Les deux réponses ici sont correctes et bonnes, mais je voulais ajouter un détail supplémentaire basé sur le titre de cette question.

Quand j'ai vu "ES6 - Appeler une méthode statique dans une classe", cela ressemblait à "appeler une méthode statique (à partir d'une méthode non statique) dans une classe". Définissez pas ce que le demandeur de la question initiale demande dans les détails.

Mais pour ceux qui veulent savoir comment appeler une méthode statique depuis une méthode non statique dans une classe, vous pouvez le faire comme ceci:

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!"

L'idée est que la méthode statique is peut être appelée sans créer une nouvelle instance de la classe. Cela signifie que vous pouvez l'appeler à l'intérieur de la méthode d'une instance de la même manière que vous l'appelez à l'extérieur de l'instance.

Encore une fois, je sais que ce n'est pas ce que demandait le détail de la question, mais cela pourrait aider d'autres personnes.

22
Chris Schmitz