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