Maison  >  Article  >  interface Web  >  Child.prototype = Parent.Prototype vs. Child.prototype = new Parent() : Pourquoi choisir l'un plutôt que l'autre dans l'héritage JavaScript ?

Child.prototype = Parent.Prototype vs. Child.prototype = new Parent() : Pourquoi choisir l'un plutôt que l'autre dans l'héritage JavaScript ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-13 14:38:02825parcourir

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

Modèle d'héritage de remplacement : Child.prototype = Parent.Prototype vs. Child.prototype = new Parent()

Dans l'héritage JavaScript, le La relation entre les objets enfants et parents est établie par le chaînage de prototypes. Généralement, les développeurs définissent l'héritage en utilisant Child.prototype = new Parent(). Cependant, une approche alternative, Child.prototype = Parent.Prototype, existe également. Cet article examine les différences entre les deux et fournit une explication d'une divergence apparente qui survient lors de l'utilisation de ce dernier.

Différence d'exécution

Child.prototype = new Parent () crée un nouvel objet comme prototype pour la classe enfant (Child) et définit son prototype sur la classe parent (Parent). Cet objet nouvellement créé hérite de toutes les propriétés et méthodes du parent.

D'un autre côté, Child.prototype = Parent.Prototype ne crée pas de nouvel objet. Au lieu de cela, il fait simplement référence au prototype de la classe parent. Cela signifie que les classes enfant et parent partagent le même objet prototype et que toute modification apportée à l'une affectera l'autre.

Différence dans la propriété .proto

Dans l'exemple fourni , la divergence survient parce que les lignes this.hitBox tentent d'ajouter des propriétés à l'objet this, qui dans le cas de Spaceship est le prototype nouvellement créé. Cependant, lorsque le prototype (this.hitBox) est ensuite attribué à GameObject.prototype, le prototype de GameObject est écrasé et les propriétés ajoutées au prototype de Spaceship sont perdues. Cela explique pourquoi la propriété this.proto dans Spaceship est définie sur Spaceship au lieu de GameObject.

Méthode d'héritage recommandée

Pour que l'héritage fonctionne correctement, il est recommandé d'utiliser Child .prototype = new Parent() au lieu de Child.prototype = Parent.Prototype. La première approche crée un objet prototype distinct pour la classe enfant, tandis que la seconde peut conduire à un comportement d'héritage inattendu.

Pour atténuer le problème dans l'exemple fourni, on peut utiliser Object.create(GameObject.prototype) pour créer un nouvel objet comme prototype pour Spaceship. Cet objet aura les mêmes propriétés et méthodes que le prototype de GameObject mais ne sera pas écrasé lorsque le prototype de GameObject sera modifié.

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:
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