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
Libérer: 2024-11-19 09:13:02
original
175 Les gens l'ont consulté

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 );

    }

}
Copier après la connexion

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 = [];

}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal