A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Classes/Static_initialization_blocks below:

静的初期化ブãƒãƒƒã‚¯ - JavaScript | MDN

静的初期化ブロックを使わない場合、クラス宣言の後で静的メソッドを呼び出すことで、複雑な静的初期化を行うことができます。

class MyClass {
  static init() {
    // プライベート静的フィールドにアクセスすることができる
  }
}

MyClass.init();

しかし、この手法では実装の詳細(init() メソッド)がクラスのユーザーに公開されてしまいます。一方、クラスの外部で宣言された初期化ロジックはプライベート静的フィールドにアクセスすることはできません。静的初期化ブロックでは、任意の初期化ロジックをクラス内で宣言し、クラスの評価中に実行することができます。

class は、そのクラス本体に任意の数の static {} 初期化ブロックを置くことができます。 これらのブロックは、宣言された順に、静的フィールド初期化子とともに評価されます。 スーパークラスの静的初期化は、そのサブクラスの初期化よりも先に実行されます。

静的ブロックの内部で宣言された変数のスコープは、そのブロックのローカルなものです。ここには初期化ブロック内で宣言された var, function, const, let は、そのブロックのローカル変数であるため、 var 宣言は静的ブロックの外に巻き上げされることはありません。

var y = "Outer y";

class A {
  static field = "Inner y";
  static {
    // var y はブロックの中にしか巻き上げられない
    console.log(y); // undefined <-- not 'Outer y'

    var y = this.field;
  }
}

// 静的ブロックで定義された var y は
// ブロックの外に巻き上げられない
console.log(y); // 'Outer y'

静的ブロック内の this は、そのクラスのコンストラクター オブジェクトを参照します。 super.プロパティ を使用して、スーパークラスの静的プロパティにアクセスすることができます。 ただし、クラスの静的初期化ブロック内で super() を呼び出したり、 arguments オブジェクトを使用したりするのは構文エラーであることに注意してください。

式は同期的に評価されます。初期化子式で(await や yield)を使用することはできません。(初期化子式は暗黙に関数に包まれていると考えてください)。

静的ブロックのスコープは、クラス本体の字句スコープの中で入れ子になり、構文エラーを発生させることなく、クラス内で宣言されたプライベート名にアクセスすることができます。

静的フィールド初期化子と静的初期化ブロックは、 1 つずつ評価されます。フィールド初期化子は、それより上のフィールド値を参照することはできますが、それより下のフィールド値を参照することはできません。静的メソッドはすべて事前に追加され、アクセスすることができますが、初期化されるフィールドより下のフィールドを参照している場合、呼び出すと期待した動作をしないことがあります。

メモ: これはプライベート静的フィールドではより重要です。初期化されていないプライベートフィールドにアクセスすると、たとえそのプライベートフィールドが下で宣言されていたとしても、 TypeError が発生するからです。(プライベートフィールドが宣言されていない場合は、早期に SyntaxError となります。)

静的初期化ブロックはデコレーターを持つことができません(クラス自身は持つことができます)。


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4