Maison >interface Web >js tutoriel >Pourquoi le mécanisme d'héritage de JavaScript ne met-il pas automatiquement à jour la propriété Constructor ?

Pourquoi le mécanisme d'héritage de JavaScript ne met-il pas automatiquement à jour la propriété Constructor ?

DDD
DDDoriginal
2024-12-04 15:07:11204parcourir

Why Doesn't JavaScript's Inheritance Mechanism Automatically Update the Constructor Property?

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

L'extrait de code fourni démontre l'héritage en JavaScript. Cependant, cela soulève également des questions sur la propriété constructeur et l'opérateur instanceof.

Pourquoi la propriété constructeur n'est-elle pas mise à jour pour b et c ?

Lors de la définition de b.prototype sur new a(), l'objet prototype de a devient le prototype de b. Cela ne met pas à jour la propriété constructeur de b, qui reste la fonction b. De même, c hérite de b et hérite donc également du constructeur de b, qui pointe finalement vers a.

Le mécanisme d'héritage est-il défectueux ?

Non, le mécanisme d'héritage est correct . En JavaScript, la propriété constructeur est une propriété de l'objet prototype, et non de l'instance elle-même. Lors de la création d'une instance, la propriété interne [[proto]] pointe vers le prototype du constructeur, et non vers la fonction constructeur elle-même.

Mise à jour de la propriété constructeur

Pour mettre à jour la propriété constructeur, on peut utiliser le modèle suivant :

function Square(side) {
    if (this instanceof Square) {
        this.side = side;
    } else {
        return new Square(side);
    }
}

Comprendre instanceof

L'opérateur instanceof ne s'appuie pas sur la propriété constructeur de l'instance. Au lieu de cela, il vérifie si la chaîne de prototypes de l'objet instance contient le prototype de la fonction constructeur. Dans le code donné :

c.prototype = new b();
console.log(new c() instanceof c); // true

Même si la propriété constructeur de (new c()) pointe vers a(), instanceof vérifie la chaîne de prototypes et l'identifie correctement comme une instance de c car la chaîne de prototypes inclut c.prototype.

Conclusion

L'héritage en JavaScript implique de définir le prototype du constructeur dérivé sur une instance du constructeur de base. La propriété constructeur reste une propriété de l'objet prototype et l'opérateur instanceof vérifie la chaîne de prototypes pour déterminer si une instance appartient à un constructeur spécifique.

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!

Déclaration:
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