JavaScript プロトタイプの定義: 2 つのメソッドの比較
JavaScript でプロトタイプを定義する場合、開発者には 2 つの主なオプションがあります: 名前付き関数を使用する式またはオブジェクト リテラル割り当て。これらのメソッドはさまざまな目的を果たし、プロトタイプ メンバーの継承にさまざまな影響を及ぼします。
オプション 1: 名前付き関数式
Person.prototype.sayName = function(name) { alert(name); }
この構文は、既存のプロトタイプ オブジェクトを拡張します。 SayName という新しいプロパティを追加します。 Person クラスのインスタンスがすでに存在する場合、それらのインスタンスはこの新しいメソッドを継承します。ただし、既存のプロトタイプ メンバーは影響を受けません。
オプション 2: オブジェクト リテラルの割り当て
Person.prototype = { sayName: function(name) { alert(name); } }
オプション 1 とは異なり、このメソッドはプロトタイプ オブジェクト全体を新しいオブジェクトのリテラル。その結果、デフォルトのコンストラクター関数を含め、既存のプロトタイプ メンバーはすべて失われます。これらのメンバーに依存するクラスのインスタンスが既に存在する場合、予期しない動作が発生する可能性があります。
機能の違い
2 つのメソッドの主な機能の違いは、オプションです。 1 はすべての既存のインスタンスのプロトタイプを変更しますが、オプション 2 はその後に作成されたインスタンスにのみ影響します。
一方を選択する利点
オプション 1 は、既存のプロトタイプ オブジェクトを変更せずに対象を絞った拡張が可能になるため、よりクリーンで効率的であると考えられます。メンバー。一方、オプション 2 には、重要なプロトタイプ関数を誤って上書きするリスクがあります。
外部プロトタイプまたはネイティブ プロトタイプを拡張する場合は、予期せぬ結果を避けるためにオプション 1 をお勧めします。オブジェクト リテラル構文が優先される場合は、Object.assign() または同様のユーティリティ関数を使用してプロトタイプを安全に拡張できます:
Object.assign(Person.prototype, { sayName: function(name) { alert(name); } });
以上がJavascript プロトタイプ定義方法は、名前付き関数式とオブジェクト リテラル割り当てのどちらが優れていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。