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

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

Mary-Kate Olsen
リリース: 2024-11-13 14:38:02
オリジナル
967 人が閲覧しました

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) を使用して、 Spaceship のプロトタイプとして新しいオブジェクトを作成します。このオブジェクトは、GameObject のプロトタイプと同じプロパティとメソッドを持ちますが、GameObject のプロトタイプが変更されても上書きされません。

以上がChild.prototype = Parent.Prototype と Child.prototype = new Parent(): JavaScript の継承で一方を選択する理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート