Maison >interface Web >js tutoriel >Pourquoi la propriété du constructeur JavaScript n'est-elle pas mise à jour dans l'héritage prototypique ?
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()
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; }
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
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!