Maison > interface Web > js tutoriel > Pourquoi l'écrasement des objets imbriqués dans le modèle d'héritage prototypique de Crockford affecte-t-il le prototype ?

Pourquoi l'écrasement des objets imbriqués dans le modèle d'héritage prototypique de Crockford affecte-t-il le prototype ?

DDD
Libérer: 2024-12-09 15:46:11
original
173 Les gens l'ont consulté

Why Does Overwriting Nested Objects in Crockford's Prototypal Inheritance Pattern Affect the Prototype?

Problèmes liés aux objets imbriqués dans le modèle d'héritage prototypique de Crockford

Le modèle d'héritage prototypique de Douglas Crockford est une alternative simplifiée au « nouveau » intégré mot-clé en JavaScript. Cependant, les utilisateurs peuvent rencontrer des problèmes lorsqu'ils tentent d'hériter d'objets imbriqués à l'aide de ce modèle.

Dans ce modèle d'héritage, le prototype d'un objet cible est défini sur un autre objet, héritant de ses propriétés. Si une propriété imbriquée est écrasée dans l'objet cible, la modification se propage tout au long de la chaîne de prototypes. Ce comportement est incompatible avec la notion attendue d'objets imbriqués.

Considérez l'exemple fourni :

var nestObj = {
  sex: "female",
  info: {
    firstname: "Jane",
    lastname: "Dough",
    age: 32,
  },
};
var person2 = Object.create(nestObj);
Copier après la connexion

Lorsque la propriété person2.info.age est écrasée, cela change également l'âge du objet imbriqué dans le prototype (nestObj.info.age). Cela peut être inattendu.

D'après la réponse, ce comportement n'est pas une incohérence. Les objets imbriqués ne sont pas considérés comme des entités distinctes. Au lieu de cela, il s’agit soit de propriétés propres à l’objet, soit héritées du prototype. L'écrasement d'une valeur de propriété sur un objet imbriqué affecte à la fois la propriété propre et la propriété héritée.

Pour modifier une propriété imbriquée indépendamment, il faut lui attribuer une nouvelle référence d'objet.

person2.info = {
  firstname: "Jane",
  lastname: "Dough",
  age: 32,
};
Copier après la connexion

Ceci crée un nouvel objet imbriqué indépendant du prototype. L'écrasement des propriétés sur ce nouvel objet n'affectera pas le prototype.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal