Cet article analyse l'utilisation de l'héritage de la chaîne prototype JavaScript. Partagez-le pour votre référence. L'analyse spécifique est la suivante:
Copiez le code comme suit: Fonction Shape () {
this.name = 'forme';
this.toString = function () {
Renvoie ce.name;
}
}
fonction twoDShape () {
this.name = '2d forme';
}
Triangle de fonction (côté, hauteur) {
this.name = 'triangle';
this.side = côté;
this.height = hauteur;
this.getArea = function () {
Renvoie ceci.side * this.height / 2;
};
}
/* héritage */
TwoDShape.prototype = new Shape ();
Triangle.prototype = new twoDShape ();
Lorsque nous réécrivons complètement la propriété du prototype de l'objet, il a parfois un certain impact négatif sur la propriété constructeur de l'objet.
Par conséquent, après avoir terminé le cadre de la relation de succession pertinente, il est très bonne habitude de réinitialiser les attributs const de ces objets en conséquence. Comme indiqué ci-dessous:
La copie de code est la suivante: twodshape.prototype.constructor = twoDShape;
Triangle.prototype.constructor = triangle;
récrire:
Copiez le code comme suit: Fonction Shape () {}
Shape.prototype.name = 'forme';
Shape.prototype.toString = function () {
Renvoie ce.name;
}
fonction twoDShape () {}
TwoDShape.prototype = new Shape ();
Twodshape.prototype.constructor = twodshape;
Twodshape.prototype.name = '2d forme';
Triangle de fonction (côté, hauteur) {
this.side = côté;
this.height = hauteur;
}
Triangle.prototype = new twodshape;
Triangle.prototype.constructor = triangle;
Triangle.prototype.name = 'triangle';
Triangle.prototype.getArea = function () {
Renvoie ceci.side * this.height / 2;
}
Réécrivez à nouveau (référence Pass au lieu de Pass de valeur):
Copiez le code comme suit: Fonction Shape () {}
Shape.prototype.name = 'forme';
Shape.prototype.toString = function () {
Renvoie ce.name;
}
fonction twoDShape () {}
Twodshape.prototype = forme.prototype;
Twodshape.prototype.constructor = twodshape;
Twodshape.prototype.name = '2d forme';
Triangle de fonction (côté, hauteur) {
this.side = côté;
this.height = hauteur;
}
Triangle.prototype = twodshape.prototype;
Triangle.prototype.constructor = triangle;
Triangle.prototype.name = 'triangle';
Triangle.prototype.getArea = function () {
Renvoie ceci.side * this.height / 2;
}
Bien que l'efficacité soit améliorée, une telle méthode a un effet secondaire, car elle est passée de référence, et non de la valeur, la valeur du nom dans "l'objet parent" est affectée.
L'objet enfant et l'objet parent pointent vers le même objet. Par conséquent, une fois que l'objet enfant modifie son prototype, l'objet parent sera également modifié immédiatement.
Réécrire à nouveau (en utilisant le constructeur temporaire):
Copiez le code comme suit: Fonction Shape () {}
Shape.prototype.name = 'forme';
Shape.prototype.toString = function () {
Renvoie ce.name;
}
fonction twoDShape () {}
var f = fonction () {}
F.prototype = forme.prototype;
TwoDShape.prototype = new f ();
Twodshape.prototype.constructor = twodshape;
Twodshape.prototype.name = '2d forme';
Triangle de fonction (côté, hauteur) {
this.side = côté;
this.height = hauteur;
}
F.prototype = twodshape.prototype;
Triangle.prototype = new f ();
Triangle.prototype.constructor = triangle;
Triangle.prototype.name = 'triangle';
Triangle.prototype.getArea = function () {
Renvoie ceci.side * this.height / 2;
}
Bien que l'efficacité soit améliorée, une telle méthode a un effet secondaire, car elle est passée de référence, et non de la valeur, la valeur du nom dans "l'objet parent" est affectée.
L'objet enfant et l'objet parent pointent vers le même objet. Par conséquent, une fois que l'objet enfant aligne le prototype et le modifie, l'objet parent sera également modifié immédiatement.
J'espère que cet article sera utile à la programmation JavaScript de tous.