"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi les membres d'objets JavaScript prototypés sous forme de tableaux sont-ils partagés entre les instances de classe ?

Pourquoi les membres d'objets JavaScript prototypés sous forme de tableaux sont-ils partagés entre les instances de classe ?

Publié le 2024-12-22
Parcourir:850

Why do JavaScript Object Members Prototyped as Arrays Become Shared Across Class Instances?

Membres d'objets JavaScript prototypés sous forme de tableaux : partagés entre les instances de classe

Lors du prototypage de tableaux en JavaScript, il est crucial de comprendre que ces membres sont partagés parmi toutes les instances de classe. Ce comportement peut sembler contre-intuitif si vous êtes habitué aux membres d'objets privés.

Explication du comportement

Le mécanisme de prototype de JavaScript permet aux objets d'hériter des propriétés et des méthodes d'un objet parent, connu sous le nom de prototype. Lorsque vous définissez un tableau en tant que propriété dans le prototype, il devient accessible à tous les objets qui héritent de ce prototype.

L'exemple de script illustre ce comportement :

function Sandwich() {
    // Uncomment this to fix the problem
    //this.ingredients = [];
}

Avec la ligne commentée sans commentaire, chaque instance de Sandwich aurait son propre tableau d'ingrédients privé. Cependant, avec la ligne commentée, toutes les instances partagent le même tableau de prototypes.

Cela signifie que l'ajout d'un ingrédient au cheeseburger met également à jour les ingrédients de blt et spice_chicken_sandwich. Pour éviter cela, vous devez définir le tableau des ingrédients dans le constructeur, comme indiqué dans l'exemple mis à jour ci-dessous :

function Sandwich() {
    this.ingredients = [];
}

Prototype vs instance

Il est essentiel de faire la distinction entre les propriétés du prototype et les propriétés de l'instance. Les propriétés du prototype sont partagées par tous les objets qui héritent de ce prototype, tandis que les propriétés d'instance sont uniques à chaque objet.

  • Attribuez des propriétés au prototype pour définir des données ou des méthodes partagées.
  • Attribuer propriétés à l'instance à l'intérieur du constructeur pour définir des données spécifiques à l'instance.

Modifications du code pour corriger le Comportement

Dans l'exemple de script, décommentez la ligne this.ingredients = []; dans le constructeur Sandwich garantit que chaque instance possède son propre tableau d'ingrédients, comme prévu.

Conclusion

Comprendre le comportement des tableaux prototypés en JavaScript est crucial pour éviter un partage inattendu parmi les instances de classe. N'oubliez jamais que les données qui doivent être spécifiques à une instance doivent être définies dans le constructeur, tandis que les données partagées peuvent être attribuées au prototype via l'héritage.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3