ホームページ >ウェブフロントエンド >jsチュートリアル >「new」を含む JavaScript 関数式は本当に静的ですか?

「new」を含む JavaScript 関数式は本当に静的ですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-20 12:55:19529ブラウズ

Is a JavaScript Function Expression with `new` Truly Static?

「new」キーワードを使用した Javascript 関数式は本当に静的ですか?

JavaScript で静的なクラスを作成しようとしましたが、コンストラクターまたはインスタンス化を使用して、コードは次のように記述されました:

var gameData = new function () {
    //May need this later 
    this.init = function () { };

    this.storageAvailable = function () {
        if (typeof (Storage) !== "undefined") {
            return true;
        }
        else {
            return false;
        }
    };
}

仮定それは、「new」キーワードがインスタンス化を防ぎ、関数式を静的クラスのように動作させることです。ただし、これは完全に正確というわけではありません。

JavaScript の「静的」概念を理解する

JavaScript では、静的なプロパティやメソッドはインスタンスにバインドされません。クラス。インスタンスが存在するかどうかに関係なく、クラス自体に属します。静的メンバーは通常、クラスのすべてのインスタンスによって共有されます。

関数式アプローチの制限

「new」キーワードにもかかわらず、関数式にはコンストラクターが存在します。財産。これは、次のコードを使用して復元できることを意味します:

var gameData2 = new (gameData.constructor)();

これにより、関数式の別のインスタンスが作成され、意図された静的な動作が無効になります。さらに、プロトタイプ チェーンには、関数式の役に立たないプロトタイプ オブジェクトが含まれています。

JavaScript での「静的」実装の代替案

真の静的な動作を実現するには、次の代替案を検討してください。 :

  • オブジェクト リテラル: を使用しますコンストラクターを使用せずにプロパティとメソッドを定義する単純なオブジェクト リテラル。
  • モジュール パターンの明らかに: オブジェクト リテラルを IIFE (即時呼び出し関数式) で囲み、クロージャー スコープの変数を作成します。
  • コンストラクター 'Class': コンストラクター関数を定義しますインスタンス化時に同じシングルトン オブジェクトを返します。

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

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