Maison  >  Article  >  interface Web  >  Pourquoi les tableaux prototypés en JavaScript sont-ils partagés entre les instances ?

Pourquoi les tableaux prototypés en JavaScript sont-ils partagés entre les instances ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-23 02:19:10228parcourir

Why Do Prototyped Arrays in JavaScript Become Shared Across Instances?

Tableaux prototypés en JavaScript : partagés entre instances

En JavaScript, le prototypage permet de partager des comportements et des données entre instances de classes. Cependant, lors du prototypage de tableaux, un comportement unique apparaît : ils deviennent partagés entre toutes les instances de classe plutôt que d'être privés.

Comment fonctionne le prototypage :

Le prototype d'un objet sert de modèle pour créer de nouveaux objets. Les propriétés et méthodes définies dans le prototype sont accessibles par tous les objets qui en héritent. Ce concept diffère des langages basés sur des classes dans lesquels les instances ont des copies distinctes des propriétés.

Dans l'exemple suivant, la classe Sandwich hérite de l'objet Sandwich.prototype :

function Sandwich() {

    // Uncomment to fix the problem
    //this.ingredients = [];

}
Sandwich.prototype = {

    "ingredients" : [],
    // ...
};

Ici, le La propriété des ingrédients est définie sur le prototype. Cela signifie que toutes les instances (par exemple, cheeseburger, blt, etc.) partageront ce même tableau.

Tableaux partagés :

Le problème avec les tableaux prototypés est que la modification d'un le tableau de l'instance affecte tous les autres. Cela peut conduire à un comportement inattendu, comme observé dans l'exemple fourni dans la question. Lorsque cheeseburger.ingredients ou blt.ingredients est modifié, cela modifie le même tableau partagé hérité de Sandwich.prototype.

Comment éviter le partage :

Pour créer des tableaux pour chaque instance, définissez la propriété dans le constructeur, pas le prototype :

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

Ici, la propriété des ingrédients est attribué à chaque instance nouvellement créée, ce qui la rend distincte et isolée des autres instances.

Données partagées ou spécifiques à l'instance :

La règle générale est d'attribuer une instance -des données spécifiques au sein du constructeur et des données partagées (par exemple, des méthodes) au sein du prototype. Cela permet un accès contrôlé et une flexibilité dans la création d'objets.

Remarques supplémentaires :

  • Les propriétés du prototype sont référencées en interne via un pointeur vers l'objet prototype.
  • Accéder au prototype d'un objet est possible en utilisant Object.getPrototypeOf(obj).
  • Ce comportement est inhérent à l'héritage prototypique en JavaScript et ne s'applique pas aux langages basés sur les classes.

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