Le concept d'héritage prototypique de Douglas Crockford fournit une approche simplifiée de la création d'objets, comme en témoigne la fonction "Object.create". Cependant, les utilisateurs peuvent rencontrer des difficultés lorsqu'ils traitent des objets imbriqués dans ce cadre d'héritage. Plus précisément, l'écrasement des valeurs d'objets imbriqués peut affecter d'autres objets tout au long de la chaîne de prototypes, entraînant des résultats inattendus.
Pour illustrer ce problème, considérez l'extrait de code suivant :
// Flat object var flatObj = { firstname: "John", lastname: "Doe", age: 23 } // Nested object var nestObj = { sex: "female", info: { firstname: "Jane", lastname: "Dough", age: 32 } }
Dans ce scénario, la création de nouveaux objets à l'aide de "Object.create" et la tentative de modification des valeurs d'objet imbriquées entraînent des modifications involontaires des objets prototypes :
// Objects created using Object.create var person1 = Object.create(flatObj); // Flat object inheritance var person2 = Object.create(nestObj); // Nested object inheritance // Overwriting nested object values person1.age = 69; person2.info.age = 96; // Prototype objects have been modified console.log(nestObj.info.age); // Outputs 96 instead of 32
Le problème principal vient du fait que tous les objets, y compris ceux imbriqués, sont traités comme des propriétés d'objet standard. Lors de la modification d'une valeur d'objet imbriqué, la modification est propagée non seulement à l'objet actuel mais également à tout autre objet héritant du même prototype.
Par conséquent, si vous souhaitez conserver des objets imbriqués indépendants, il est crucial de créez de nouveaux objets pour eux au lieu de compter sur l'héritage. Par exemple :
// Creating an independent nested object person3 = { sex: "male", info: Object.create(nestObj2.info) // Create a new object for the nested "info" property }
Ce faisant, vous vous assurez que les modifications apportées aux valeurs d'objet imbriquées n'affectent que l'objet spécifique et ne se propagent pas dans la chaîne de prototypes.
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!