Maison > interface Web > js tutoriel > Pourquoi « Child.prototype = Parent.prototype » rompt-il l'héritage JavaScript ?

Pourquoi « Child.prototype = Parent.prototype » rompt-il l'héritage JavaScript ?

Barbara Streisand
Libérer: 2024-11-19 00:55:02
original
386 Les gens l'ont consulté

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

Pourquoi Child.prototype = Parent.Prototype pourrait rompre l'héritage Javascript ?

Dans l'héritage Javascript, vous avez peut-être rencontré le modèle d'héritage suivant :

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

Spaceship.prototype = new GameObject();
Spaceship.prototype.constructor = Spaceship;
Copier après la connexion

Cependant, vous avez peut-être remarqué un comportement inattendu lors de l'ajout de propriétés à Spaceship.prototype après l'héritage. La propriété prototype de Spaceship est définie sur Spaceship plutôt que sur GameObject.

Cela se produit car lorsque vous définissez Spaceship.prototype = GameObject.prototype, les deux prototypes commencent à faire référence au même objet. Toute modification d'un objet affectera l'autre. Par conséquent, l'ajout de propriétés à Spaceship.prototype les ajoutera également à GameObject.prototype.

Pour éviter ce problème, vous pouvez utiliser :

Spaceship.prototype = Object.create(GameObject.prototype);
Copier après la connexion

Cela crée un nouvel objet avec GameObject.prototype comme prototype, garantissant que les modifications apportées à Spaceship.prototype n'affecteront pas GameObject.prototype.

Alternativement, si vous souhaitez invoquer le constructeur, utilisez GameObject.apply(this, arguments) dans le constructeur Spaceship au lieu de la ligne ci-dessus.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal