Héritage JavaScript : Comprendre la propriété Constructeur
Question :
Considérez le code :
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, malgré définir leur prototype pour qu'il hérite d'un ?
Réponse :
Pour comprendre cela, embarquons-nous dans un voyage conceptuel :
Maintenant, la question se pose : pourquoi le propriété de constructeur définie sur l'objet instance lui-même ? Prenons l'exemple suivant :
function defclass(prototype) { var constructor = prototype.constructor; constructor.prototype = prototype; return constructor; } var Square = defclass({ constructor: function (side) { this.side = side; }, area: function () { return this.side * this.side; } }); var square = new Square(10); console.log(square.area()); // 100
Dans cet exemple, la propriété constructor est une méthode du prototype comme les autres. Cependant, il est utilisé spécifiquement pour initialiser les instances du prototype.
Définir la propriété constructeur sur le prototype offre plusieurs avantages :
Héritage et propriété du constructeur
Dans le cas de l'héritage, la propriété prototype du constructeur dérivé est définie sur une instance du constructeur de base . Par conséquent, la propriété interne [[proto]] de l'instance du constructeur dérivé pointe également vers le prototype du constructeur de base. Il en résulte que la propriété constructeur de l'instance de constructeur dérivé pointe vers le constructeur de base.
L'opérateur instanceof
L'opérateur instanceof opère sur un objet instance et une fonction constructeur. Contrairement à la croyance populaire, il ne repose pas sur la propriété constructeur de l’instance. Au lieu de cela, il parcourt la chaîne de prototypes de l'instance et vérifie si sa propriété interne [[proto]] correspond à la propriété prototype du constructeur. Une correspondance renvoie vrai, tandis qu'une fin de chaîne de prototypes renvoie faux.
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!