Maison > interface Web > js tutoriel > le corps du texte

Les membres d'objet JavaScript sont-ils prototypes en tant que tableaux partagés ou privés ?

Linda Hamilton
Libérer: 2024-11-14 18:43:02
original
999 Les gens l'ont consulté

Are JavaScript Object Members Prototyped as Arrays Shared or Private?

Membres d'un objet JavaScript prototypés sous forme de tableaux : partagés ou privés ?

En JavaScript, les propriétés d'un objet peuvent être définies de deux manières : directement sur l'objet ou en tant que propriétés de l'objet. le prototype de l'objet. Ce comportement a des implications significatives lorsqu'il s'agit de tableaux.

Par défaut, les tableaux prototypés sont partagés entre toutes les instances d'une classe, ce qui entraîne un comportement inattendu. Par exemple, si le prototype d'une classe contient un tableau vide, toutes les instances référenceront le même tableau. Cela peut être observé dans l'exemple suivant :

function Sandwich() {
  // Uncomment 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);
  }
};

var cheeseburger = new Sandwich();
cheeseburger.addIngredients(["burger", "cheese"]);

var blt = new Sandwich();
blt.addIngredients(["bacon", "lettuce", "tomato"]);

print_r("Cheeseburger contains:", cheeseburger.ingredients);
Copier après la connexion

Dans cet exemple, le cheeseburger et le blt partagent le même tableau d'ingrédients, même s'il s'agit d'instances différentes. L'ajout d'un ingrédient au cheeseburger affecte également le blt, mettant en évidence la nature partagée du tableau.

Pour remédier à ce comportement, il est recommandé de définir des tableaux directement sur l'objet lui-même, plutôt que comme propriétés de prototype. Cela garantit que chaque instance possède son propre tableau privé. La modification suivante du code résout le problème :

function Sandwich() {
  this.ingredients = [];
}
Copier après la connexion

En définissant le tableau dans le constructeur, chaque instance de Sandwich aura sa propre copie privée du tableau, éliminant le comportement de partage.

En résumé, les tableaux prototypés sont partagés entre toutes les instances d'une classe en JavaScript. Pour créer des tableaux privés pour chaque instance, il est nécessaire de définir le tableau directement sur l'objet lui-même dans le constructeur. Cette distinction est cruciale pour comprendre et gérer le comportement des objets 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