Este artículo analiza el uso de la herencia de la cadena de prototipos JavaScript. Compártelo para su referencia. El análisis específico es el siguiente:
Copie el código de la siguiente manera: Function Shape () {
this.name = 'Shape';
this.ToString = function () {
devolver esto.name;
}
}
función twodshape () {
this.name = '2d Shape';
}
Triángulo de función (lado, altura) {
this.name = 'Triangle';
this.side = lado;
this.Height = altura;
this.getArea = function () {
devuelve esto.side*this.Height/2;
};
}
/* herencia */
Twodshape.prototype = new Shape ();
Triangle.prototype = new twodShape ();
Cuando reescribimos completamente la propiedad prototipo del objeto, a veces tiene un cierto impacto negativo en la propiedad del constructor del objeto.
Por lo tanto, después de completar la configuración de relación de herencia relevante, es un muy buen hábito restablecer los atributos const de estos objetos en consecuencia. Como se muestra a continuación:
La copia del código es la siguiente: twodshape.prototype.constructor = twodshape;
Triangle.prototype.constructor = triangle;
volver a escribir:
Copie el código de la siguiente manera: Funcion shape () {}
Shape.prototype.name = 'Shape';
Shape.prototype.toString = function () {
devolver esto.name;
}
función twodshape () {}
Twodshape.prototype = new Shape ();
Twodshape.prototype.constructor = twodshape;
Twodshape.prototype.name = '2d Shape';
Triángulo de función (lado, altura) {
this.side = lado;
this.Height = altura;
}
Triangle.prototype = new twodShape;
Triangle.prototype.constructor = triangle;
Triangle.prototype.name = 'triangle';
Triangle.prototype.getArea = function () {
devuelve esto.side*this.Height/2;
}
Reescribir nuevamente (pase de referencia en lugar de pase de valor):
Copie el código de la siguiente manera: Funcion shape () {}
Shape.prototype.name = 'Shape';
Shape.prototype.toString = function () {
devolver esto.name;
}
función twodshape () {}
Twodshape.prototype = shape.prototype;
Twodshape.prototype.constructor = twodshape;
Twodshape.prototype.name = '2d Shape';
Triángulo de función (lado, altura) {
this.side = lado;
this.Height = altura;
}
Triangle.prototype = twodshape.prototype;
Triangle.prototype.constructor = triangle;
Triangle.prototype.name = 'triangle';
Triangle.prototype.getArea = function () {
devuelve esto.side*this.Height/2;
}
Aunque se mejora la eficiencia, dicho método tiene un efecto secundario, ya que es un paso de referencia, no un valor de valor, por lo que el valor del nombre en el "objeto principal" se ve afectado.
El objeto infantil y el objeto principal apuntan al mismo objeto. Por lo tanto, una vez que el objeto infantil cambia su prototipo, el objeto principal también se cambiará de inmediato.
Reescribir nuevamente (usando constructor temporal):
Copie el código de la siguiente manera: Funcion shape () {}
Shape.prototype.name = 'Shape';
Shape.prototype.toString = function () {
devolver esto.name;
}
función twodshape () {}
var f = function () {}
F.prototype = sape.prototype;
Twodshape.prototype = new f ();
Twodshape.prototype.constructor = twodshape;
Twodshape.prototype.name = '2d Shape';
Triángulo de función (lado, altura) {
this.side = lado;
this.Height = altura;
}
F.prototype = twodshape.prototype;
Triangle.prototype = new f ();
Triangle.prototype.constructor = triangle;
Triangle.prototype.name = 'triangle';
Triangle.prototype.getArea = function () {
devuelve esto.side*this.Height/2;
}
Aunque se mejora la eficiencia, dicho método tiene un efecto secundario, ya que es un paso de referencia, no un valor de valor, por lo que el valor del nombre en el "objeto principal" se ve afectado.
El objeto infantil y el objeto principal apuntan al mismo objeto. Por lo tanto, una vez que el objeto infantil alinee el prototipo y lo modifique, el objeto principal también se cambiará de inmediato.
Espero que este artículo sea útil para la programación de JavaScript de todos.