web-dev-qa-db-ja.com

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にはselfstaticなどがあります。ES6はこれらと同様のものを提供しますか?

TY.

62
Shlomi Sasson

インスタンス内から静的関数を呼び出す場合、クラス静的関数を参照する正しい方法は次のとおりです。

this.constructor.functionName();

es6静的メソッドを呼び出す

59
Otto Nascarella

通常のオブジェクトでメソッドを呼び出す と同じです。 GeneralHelper.isProd()メソッドを呼び出すと、GeneralHelperはメソッド内でthisとして使用できるため、使用できます

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

ただし、メソッドがコールバック関数 通常どおり として渡される場合、これは機能しません。また、誰かがクラスからGeneralHelperを継承し、isProdを上書きしてInheritedHelper.isProd()が他の結果を生成するときに、isに明示的にアクセスすることとは異なる場合があります。

インスタンスメソッドから静的メソッドを呼び出す場合は、 here を参照してください。また、静的メソッドのみを定義するクラスは奇妙なものであることに注意してください。代わりにプレーンオブジェクトを使用することもできます。

40
Bergi

ここでの答えは両方とも正しいものですが、この質問のタイトルに基づいて詳細を追加したかったのです。

「ES6-クラス内の静的メソッドを呼び出す」を見たとき、「クラス内の静的メソッドを(非静的メソッドから)呼び出す」ように聞こえました。最初の質問の質問者が詳細で尋ねているものではなく、Def。

ただし、クラス内の非静的メソッドから静的メソッドを呼び出す方法を知りたい場合は、次のようにできます。

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

その考え方は、クラスの新しいインスタンスを作成せずに静的メソッドを呼び出すことができるということです。つまり、インスタンスの外部で呼び出すのと同じ方法で、インスタンスのメソッドの内部で呼び出すことができます。

繰り返しますが、私はそれが質問の詳細が求めていたものではないことを知っていますが、これは他の人の役に立つかもしれません。

22
Chris Schmitz