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