ホームページ > 記事 > ウェブフロントエンド > Child.prototype = Parent.Prototype と Child.prototype = new Parent(): JavaScript の継承で一方を選択する理由
継承モデルのオーバーライド: Child.prototype = Parent.Prototype と Child.prototype = new Parent()
JavaScript 継承では、子オブジェクトと親オブジェクト間の関係は、プロトタイプ チェーンを通じて確立されます。通常、開発者は Child.prototype = new Parent() を使用して継承を定義します。ただし、別のアプローチである Child.prototype = Parent.Prototype も存在します。この記事では、この 2 つの違いを検証し、後者を使用するときに生じる明らかな矛盾について説明します。
実行の違い
Child.prototype = new Parent () は、子クラス (Child) のプロトタイプとして新しいオブジェクトを作成し、そのプロトタイプを親クラス (Parent) に設定します。この新しく作成されたオブジェクトは、親からすべてのプロパティとメソッドを継承します。
一方、Child.prototype = Parent.Prototype は新しいオブジェクトを作成しません。代わりに、親クラスのプロトタイプを参照するだけです。これは、子クラスと親クラスが同じプロトタイプ オブジェクトを共有し、一方に加えられた変更は他方にも影響することを意味します。
.proto プロパティの不一致
提供された例ではこの矛盾は、 this.hitBox 行が this オブジェクト (Spaceship の場合は新しく作成されたプロトタイプ) にプロパティを追加しようとするために発生します。ただし、後でプロトタイプ (this.hitBox) が GameObject.prototype に割り当てられると、GameObject のプロトタイプは上書きされ、Spaceship のプロトタイプに追加されたプロパティは失われます。これは、Spaceship の this.proto プロパティが GameObject ではなく Spaceship に設定される理由を説明しています。
推奨される継承方法
継承が正しく機能するには、Child を使用することをお勧めします。 Child.prototype = Parent.Prototype の代わりに .prototype = new Parent() を使用します。前者のアプローチでは子クラス用に別のプロトタイプ オブジェクトが作成されますが、後者のアプローチでは予期しない継承動作が発生する可能性があります。
提供された例の問題を軽減するには、Object.create(GameObject.prototype) を使用して、宇宙船のプロトタイプとして新しいオブジェクトを作成します。このオブジェクトは、GameObject のプロトタイプと同じプロパティとメソッドを持ちますが、GameObject のプロトタイプが変更されても上書きされません。
以上がChild.prototype = Parent.Prototype と Child.prototype = new Parent(): JavaScript の継承で一方を選択する理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。