Derived.prototype = new Base で 'new' キーワードを使用する理由
JavaScript では、継承はプロトタイプによって実現されます。既存のクラスを拡張するには、子クラスのプロトタイプを親クラスの新しいインスタンスに割り当てます。ここで、「new」キーワードが登場します。
次のコード内:
WeatherWidget.prototype = new Widget;
「new」キーワードには 2 つの目的があります:
「new」が左の場合はどうなるかアウトですか?
「new」がなければ、ウィジェット コンストラクターを呼び出すことはありません。代わりに、Widget() の引数リストを提供する必要があります。ただし、これは不可能な場合があり、エラーが発生する可能性があります。
プロパティを共有しないことの重要性
デフォルトでは、WeatherWidget のインスタンスは同じインスタンスのプロパティ値を共有します。ウィジェットの。 WeatherWidget の複数のインスタンスが互いのプロパティをオーバーライドまたは変更する可能性があるため、予期しない動作が発生する可能性があります。
これを防ぐには、「ダミー」コンストラクター (例: Dummy.prototype = Widget.prototype) を使用することをお勧めします。中間ステップとして、親インスタンスからプロパティ値を継承しない WeatherWidget の新しいプロトタイプを作成します。これにより、各 WeatherWidget インスタンスが独自の継承プロパティ セットを持つようになります。
新しい JavaScript バージョンでの代替アプローチ
ECMAScript 5 以降では、以下を使用できます。
WeatherWidget.prototype = Object.create(Widget.prototype, { constructor: {value: WeatherWidget} });
このアプローチには、コンストラクター プロパティを書き込み不能にするという追加の利点もあります。
親コンストラクターの明示的な呼び出し
親コンストラクター (例: Widget.apply(this, argument)) を明示的に呼び出す必要がある場合があります。親を初期化するための子コンストラクターinstance.
結論
Derived.prototype = new Base での 'new' の使用を理解することは、JavaScript で継承を正しく実装するために重要です。これにより、子クラスが正しいプロトタイプから確実に継承され、インスタンス間でのプロパティ値の意図しない共有が防止されます。
以上がJavaScript の継承に「Derived.prototype = new Base」で「new」を使用するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。