Maison > interface Web > js tutoriel > Comment éviter un comportement inattendu lors de la modification d'objets imbriqués dans l'héritage prototypique de Crockford ?

Comment éviter un comportement inattendu lors de la modification d'objets imbriqués dans l'héritage prototypique de Crockford ?

Mary-Kate Olsen
Libérer: 2024-12-31 08:57:09
original
478 Les gens l'ont consulté

How to Avoid Unexpected Behavior When Modifying Nested Objects in Crockford's Prototypal Inheritance?

L'héritage prototypique de Crockford : résoudre les problèmes d'imbrication

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  
    }
}
Copier après la connexion

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
Copier après la connexion

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
}
Copier après la connexion

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!

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