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