Maison >interface Web >js tutoriel >Pourquoi les tableaux prototypes en JavaScript sont-ils partagés entre les instances de classe ?

Pourquoi les tableaux prototypes en JavaScript sont-ils partagés entre les instances de classe ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-19 09:13:02189parcourir

Why Do Prototype Arrays in JavaScript Get Shared Across Class Instances?

Comprendre le partage de prototypes en JavaScript : objets hérités des prototypes

En JavaScript, les objets héritent des propriétés de leurs prototypes. Un aspect à considérer est le comportement des tableaux définis en tant que propriétés de prototype au sein des instances de classe.

Comme observé, les tableaux prototypés ne sont pas privés des instances de classe individuelles, mais sont plutôt partagés entre toutes les instances. Ce comportement se produit parce que le prototype d'un objet agit comme un objet lui-même. Les propriétés du prototype sont partagées par tous les objets dérivés de ce prototype spécifique.

Considérons l'exemple suivant :

function Sandwich() {

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

}

Sandwich.prototype = {

    "ingredients" : [],
    "addIngredients" : function( ingArray ) {

        for( var key in ingArray ) {

            this.addIngredient( ingArray[ key ] );

        }

    },
    "addIngredient" : function( thing ) {

        this.ingredients.push( thing );

    }

}

Dans cet exemple, un tableau nommé « ingrédients » est défini comme une propriété de prototype de la fonction "Sandwich". Si "this.ingredients = [];" est commenté dans le constructeur, le comportement suivant se produit :

Lorsqu'une nouvelle instance de "Sandwich" est créée (comme "cheeseburger" ou "blt"), ces instances héritent initialement du tableau "ingredients" de le prototype. Les modifications apportées à ce tableau, telles que l'ajout d'ingrédients à « cheeseburger », affectent également les tableaux « ingrédients » de toutes les autres instances « Sandwich ». Ce comportement partagé provient du fait que toutes les instances font référence au même tableau, et non à des copies individuelles.

Pour résoudre ce problème et créer un tableau distinct pour chaque instance, le tableau "ingrédients" doit être défini dans le constructeur :

function Sandwich() {

    this.ingredients = [];

}

Cette modification attribue un nouveau tableau à chaque instance de "Sandwich" pendant la construction, garantissant que toute modification apportée au tableau "ingrédients" est spécifique à l'instance.

En résumé, les tableaux définis comme propriétés du prototype sont partagés entre tous les objets qui héritent de ce prototype. Pour créer des données spécifiques à une instance, telles que des tableaux, elles doivent être définies dans le constructeur. Cette compréhension est cruciale pour une utilisation efficace de l'héritage et de la programmation orientée objet en JavaScript.

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