ホームページ  >  記事  >  ウェブフロントエンド  >  Child.prototype = Parent.Prototype と Child.prototype = new Parent(): JavaScript の継承で一方を選択する理由

Child.prototype = Parent.Prototype と Child.prototype = new Parent(): JavaScript の継承で一方を選択する理由

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-13 14:38:02825ブラウズ

Child.prototype = Parent.Prototype vs. Child.prototype = new Parent(): Why Choose One Over the Other in JavaScript Inheritance?

継承モデルのオーバーライド: 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 サイトの他の関連記事を参照してください。

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