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);
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, };
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!