非静的 ES6 クラス メソッドから静的メソッドを呼び出す方法は?

Mary-Kate Olsen
リリース: 2024-11-28 01:03:11
オリジナル
244 人が閲覧しました

How to Call Static Methods from Non-Static ES6 Class Methods?

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

ES6 クラスを操作する場合、静的メソッドにアクセスする必要がある場合があります。非静的クラスメソッド内。これを実現するには、コンストラクターを使用するか、クラス名を直接参照するという 2 つの主なオプションがあります。どちらのメソッドも技術的には実行可能ですが、オーバーライドされた静的メソッドによる継承のコンテキストでは異なる動作を示します。

オプション 1: コンストラクターの使用

class SomeObject {
  constructor(n) {
    this.n = n;
  }

  static print(n) {
    console.log(n);
  }

  printN() {
    this.constructor.print(this.n);
  }
}
ログイン後にコピー

ここではたとえば、静的メソッド print には、コンストラクター this.constructor を介してアクセスします。このアプローチにより、クラスが拡張され、静的メソッドがサブクラスでオーバーライドされた場合でも、正しい静的メソッドが確実に呼び出されます。

オプション 2: クラス名を直接参照する

class SomeObject {
  constructor(n) {
    this.n = n;
  }

  static print(n) {
    console.log(n);
  }

  printN() {
    SomeObject.print(this.n);
  }
}
ログイン後にコピー

この場合、静的メソッド print はクラス名によって参照されます。このメソッドは本質的に静的であり、継承関係に関係なく、常にクラスで定義された元の値を返します。

継承とオーバーライドに関する考慮事項

コンストラクターを使用するかの選択または、図に示すように、継承およびオーバーライドされた静的メソッドを扱う場合には、クラス名が直接重要になります。以下:

class Super {
  static whoami() {
    return "Super";
  }
  lognameA() {
    console.log(Super.whoami());
  }
  lognameB() {
    console.log(this.constructor.whoami());
  }
}
class Sub extends Super {
  static whoami() {
    return "Sub";
  }
}
ログイン後にコピー

ケース 1: Super.whoami() を使用する

  • new Sub().lognameA();これは Super クラスで定義された静的メソッドを参照するため、「Super」を出力します。
  • new Sub().lognameB();また、コンストラクター参照を使用し、サブクラスがオーバーライドされた whoami メソッドを継承しないため、「Super」も出力されます。

ケース 2: this.constructor.whoami() を使用する

  • 新しい Sub().lognameA();現在のサブクラスの静的メソッドを直接参照しているため、「Sub」を出力します。
  • new Sub().lognameB();同じ理由で "Sub" を出力します。

これらのシナリオの動作は、静的メソッドが実際にオーバーライドされるかどうかによって異なる場合があります。クラス名を介して静的プロパティを参照すると、真の静的動作が提供されますが、this.constructor を使用すると、動的なディスパッチと継承を考慮することができます。適切な方法の選択は、特定のコンテキストでの望ましい動作によって異なります。

以上が非静的 ES6 クラス メソッドから静的メソッドを呼び出す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート