ホームページ >ウェブフロントエンド >jsチュートリアル >静的メソッド呼び出しは、継承とオーバーライドを使用して ES6 クラスでどのように動作しますか?

静的メソッド呼び出しは、継承とオーバーライドを使用して ES6 クラスでどのように動作しますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-17 17:28:02705ブラウズ

How do Static Method Calls Behave in ES6 Classes with Inheritance and Overriding?

ES6 クラス メソッドからの静的メソッドの呼び出し

ES6 クラスでは、静的メソッドを呼び出す一般的な方法が 2 つあります。コンストラクターを使用する方法と、コンストラクターを使用する方法です。クラス名そのもの。どちらのアプローチも有効ですが、オーバーライドされた静的メソッドによる継承のコンテキストでは異なる動作を示します。

this.constructor を使用して静的プロパティを参照すると、動的ディスパッチが発生します。これは、現在のクラスを参照することを意味します。実例。これは、以下の例に示すように、オーバーライドされた静的メソッドを扱うときに便利です。

class Super {
  static whoami() {
    return "Super";
  }
}
class Sub extends Super {
  static whoami() {
    return "Sub";
  }
}

new Sub().whoami(); // "Sub"

この場合、whoami 静的メソッドは Sub クラスでオーバーライドされます。 this.constructor を通じて呼び出された場合、Sub クラスを参照し、正しく "Sub" を返します。

一方、クラス名を使用して静的プロパティを参照すると、元の静的メソッドに常にアクセスできるようになります。たとえ上書きされたとしても。例:

class AnotherSuper {
  static whoami() {
    return "AnotherSuper";
  }
}
class AnotherSub extends AnotherSuper {
  static whoami() {
    return "AnotherSub";
  }
}

AnotherSub.whoami(); // "AnotherSuper"

whoami が AnotherSub でオーバーライドされていても、クラス名 (「AnotherSub」) を使用して呼び出すと、依然として「AnotherSuper」が返されます。これは、AnotherSuper クラスの静的プロパティを参照しているためです。

最終的に、どのアプローチを使用するかの選択は、予想される動作によって異なります。静的プロパティが常に現在のクラスを参照する必要がある場合は、明示的な参照 (this.constructor) を使用します。それ以外の場合は、クラス名を使用して、元の静的メソッドに常にアクセスできるようにします。

以上が静的メソッド呼び出しは、継承とオーバーライドを使用して ES6 クラスでどのように動作しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。