ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript 関数式での「new」は静的な動作を作成しますか?

JavaScript 関数式での「new」は静的な動作を作成しますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-15 08:34:15957ブラウズ

Does `new` with JavaScript Function Expressions Create Static Behavior?

「new」を使用した関数式 キーワード: 静的な性質を明らかにする

JavaScript で、「new」を使用した関数式の動作を理解するキーワードが重要です。次のコードを考えてみましょう:

var gameData = new function () {
    // Function expressions require no constructor
    this.storageAvailable = function () { ... };
};

この場合の 'new' キーワードはインスタンス化を意味したり、複数のインスタンスの作成を許可したりするものではないことに注意することが重要です。代わりに、単に関数式を実行し、結果の匿名オブジェクトを 'gameData' 変数に割り当てます。

静的動作の誤解

における静的動作の概念C# は、JavaScript の関数式も静的に動作するという誤解を招く可能性があります。しかし、これは不正確です。ここでの 'new' キーワードは 2 番目のオブジェクトの作成を妨げません:

var gameData2 = new (gameData.constructor)(); // Reinstantiation is possible

さらに、関数式には匿名関数を指すコンストラクター プロパティがまだあり、これには 'gameData.constructor を使用してアクセスできます。 '。これは、真の静的クラスの目的を無効にします。

静的動作の代替手段

単一のインスタンス化できないオブジェクトを作成することが目的の場合、より適切な動作があります。 'new':

  • Object を使用した関数式の使用の代替案リテラル: これらは、コンストラクターやプロトタイプのない単純な JavaScript オブジェクトであり、一意性が確保されています。
  • 明らかになったモジュール パターン: IIFE (即時呼び出し関数式) を使用してクロージャーを作成できます。 -スコープ変数。必要なプロパティを持つオブジェクトを返します。
  • シングルトンパターン: このデザイン パターンは、クラスへのすべての参照が同じオブジェクトを指すようにする、クラスの単一の制御されたインスタンスを作成します。

結論として、JavaScript の 'new' キーワードを含む関数式は次のようになります。複数回インスタンス化でき、「gameData.constructor」を通じてアクセスできるパブリック コンストラクター プロパティを持つため、静的な動作は示されません。真の静的な動作を実現するには、オブジェクト リテラル、モジュール パターン、シングルトン パターンの公開などの代替アプローチの採用を検討してください。

以上がJavaScript 関数式での「new」は静的な動作を作成しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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