「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 での「静的」実装の代替案
真の静的な動作を実現するには、次の代替案を検討してください。 :
以上が「new」を含む JavaScript 関数式は本当に静的ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。