Membres d'objets JavaScript prototypés sous forme de tableaux : partagés entre 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 comme propriété dans le prototype, il devient accessible à tous les objets qui héritent de ce prototype.
L'exemple de script démontre ce comportement :
function Sandwich() { // Uncomment this to fix the problem //this.ingredients = []; }
Avec la ligne commentée non commenté, 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.
Modifications du code pour corriger le comportement
Dans l'exemple de script, décommentez la ligne this .ingrédients = []; au sein du 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.
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!