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()
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!