Maison > interface Web > js tutoriel > Pourquoi la propriété du constructeur JavaScript ne se met-elle pas à jour lors de l'héritage prototypique ?

Pourquoi la propriété du constructeur JavaScript ne se met-elle pas à jour lors de l'héritage prototypique ?

Linda Hamilton
Libérer: 2025-01-01 07:22:10
original
454 Les gens l'ont consulté

Why Doesn't JavaScript's Constructor Property Update During Prototypical Inheritance?

Héritage en JavaScript : le casse-tête des propriétés du constructeur

En JavaScript, l'héritage fait référence au processus de création de nouveaux objets qui héritent des propriétés et des méthodes des objets existants. Un aspect de l'héritage qui soulève souvent des questions est le comportement de la 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 la propriété constructeur n'est-elle pas mise à jour pour b et c?

La propriété constructeur d'une instance de fonction pointe vers la fonction elle-même. Dans ce cas, a(), b() et c() sont toutes des instances de fonction, donc leur propriété constructeur les référence. Lorsque nous définissons respectivement b.prototype et c.prototype sur des instances de a() et b(), nous modifions essentiellement la chaîne de prototypes de b et c, mais ne modifions pas la propriété du constructeur.

Est-ce que je fais une mauvaise héritage ?

Non, vous ne faites pas nécessairement une mauvaise héritage. Ce comportement est le résultat attendu de l’héritage prototypique en JavaScript. L'héritage en JavaScript implique de définir la propriété prototype de la classe dérivée (par exemple, b et c) sur une instance de la classe de base (par exemple, a) ou sur son objet prototype. Cela ne met pas à jour la propriété du constructeur.

Quelle est la meilleure façon de mettre à jour la propriété du constructeur ?

Une approche pour mettre à jour manuellement la propriété du constructeur consiste à attribuer la propriété dérivée. fonction constructeur en tant que propriété constructeur de l'objet prototype. Cependant, cela n'est pas toujours nécessaire et peut entraîner une confusion entre les constructeurs pour les types d'objets personnalisés.

Comment l'opérateur instanceof fonctionne-t-il dans ce contexte ?

L'opérateur instanceof vérifie si un objet est une instance d'une fonction constructeur spécifique. Dans ce cas, même si la propriété constructeur des instances b et c est définie sur a(), l'opérateur instanceof les identifie correctement comme instances de b et c en parcourant leurs chaînes de prototypes.

Ce processus de parcours correspond au propriété interne [[proto]] de chaque objet de la chaîne de prototypes à la propriété prototype de la fonction constructeur. Si une correspondance est trouvée, l'opérateur instanceof renvoie true ; sinon, il renvoie false.

Comprendre les subtilités de la propriété et de l'héritage du constructeur est crucial pour un développement JavaScript efficace. En considérant les limites et les implications de l'héritage prototypique, vous pouvez créer un code bien conçu et maintenable.

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