ホームページ >ウェブフロントエンド >jsチュートリアル >`Child.prototype = Parent.prototype` が JavaScript の継承を壊すのはなぜですか?

`Child.prototype = Parent.prototype` が JavaScript の継承を壊すのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-19 00:55:02349ブラウズ

Why Does `Child.prototype = Parent.prototype` Break JavaScript Inheritance?

Child.prototype = Parent.Prototype が Javascript の継承を壊す可能性があるのはなぜですか?

JavaScript の継承では、次のような継承パターンに遭遇したことがあるかもしれません。 :

function GameObject(oImg, x, y) {
    // GameObject constructor
}

Spaceship.prototype = new GameObject();
Spaceship.prototype.constructor = Spaceship;

ただし、継承後に Spaceship.prototype にプロパティを追加すると、予期しない動作が発生することに気付いたかもしれません。 Spaceship のプロトタイプ プロパティは、GameObject ではなく Spaceship に設定されます。

これは、Spaceship.prototype = GameObject.prototype を設定すると、2 つのプロトタイプが同じオブジェクトを参照し始めるために発生します。一方のオブジェクトを変更すると、もう一方のオブジェクトにも影響します。したがって、Spaceship.prototype にプロパティを追加すると、それらのプロパティが GameObject.prototype にも追加されます。

この問題を回避するには、以下を使用できます。

Spaceship.prototype = Object.create(GameObject.prototype);

これにより、GameObject.prototype で新しいオブジェクトが作成されます。そのプロトタイプとして、Spaceship.prototype への変更が GameObject.prototype に影響しないようにします。

または、コンストラクターを呼び出したい場合は、代わりに Spaceship コンストラクター内で GameObject.apply(this, argument) を使用します。上の行

以上が`Child.prototype = Parent.prototype` が JavaScript の継承を壊すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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