Maison > interface Web > js tutoriel > Pourquoi la propriété du constructeur JavaScript n'est-elle pas mise à jour dans l'héritage prototypique ?

Pourquoi la propriété du constructeur JavaScript n'est-elle pas mise à jour dans l'héritage prototypique ?

DDD
Libérer: 2024-12-06 18:34:12
original
623 Les gens l'ont consulté

Why Doesn't JavaScript's Constructor Property Update in Prototypal Inheritance?

Comprendre l'héritage JavaScript et la propriété constructeur

En JavaScript, l'héritage est obtenu grâce à l'héritage prototypique, où les objets héritent des propriétés et des méthodes d'autres objets via leur chaîne de prototypes. La propriété constructeur joue un rôle crucial dans ce mécanisme.

Héritage et propriété constructeur

Considérez le code suivant :

function a() {}
function b() {}
function c() {}

b.prototype = new a();
c.prototype = new b();

console.log((new a()).constructor); //a()
console.log((new b()).constructor); //a()
console.log((new c()).constructor); //a()
Copier après la connexion

Pourquoi le constructeur n'a-t-il pas été mis à jour pour b et c ? En effet, en JavaScript, la propriété constructeur n'est pas directement affectée à l'instance ; au lieu de cela, il réside sur l'objet prototype. Il stocke une référence à la fonction constructeur qui a créé l'objet. Dans l'exemple ci-dessus, le prototype de b et c est défini sur une instance de a, c'est pourquoi le constructeur des trois instances est signalé comme a().

Bonnes pratiques pour la mise à jour du constructeur

Pour mettre à jour la propriété constructeur pour les classes héritées, une approche courante consiste à utiliser une fonction intermédiaire :

function base() {}
function derive() {
  derive.superclass = base.prototype;
  derive.prototype = new derive.superclass();

  derive.prototype.constructor = derive;
}
Copier après la connexion

Cette technique garantit que la propriété constructeur des instances dérivées est correctement définie sur la fonction dérivée.

Instanceof et la chaîne de prototypes

Alors que le (nouveau c()).constructor est égal à a(), il est toujours possible pour instanceof d'identifier correctement le nouveau c() comme instance de c. En effet, instanceof vérifie la chaîne de prototypes de l'objet instance. Dans ce cas, la chaîne de prototypes pour new c() renvoie au prototype c.

console.log(new a() instanceof a); //true
console.log(new b() instanceof b); //true
console.log(new c() instanceof c); //true
Copier après la connexion

Conclusion

L'héritage de JavaScript et les interactions des propriétés du constructeur peuvent être complexes, mais les comprendre est crucial pour une programmation orientée objet efficace en JavaScript. En maîtrisant les concepts décrits dans cet article, vous pouvez écrire du code robuste et réutilisable qui exploite efficacement l'héritage et 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal