Este artigo analisa o uso da herança da cadeia de protótipos JavaScript. Compartilhe para sua referência. A análise específica é a seguinte:
Copie o código da seguinte forma: Shape da função () {
this.Name = 'Shape';
this.toString = function () {
retornar este.name;
}
}
function twodshape () {
this.name = '2d Shape';
}
Triângulo da função (lateral, altura) {
this.name = 'Triângulo';
this.side = lado;
this.Height = altura;
this.getarea = function () {
retornar this.side*this.Height/2;
};
}
/ * herança */
Twodshape.prototype = new Shape ();
Triângulo.prototype = new TwodShape ();
Quando reescrevemos completamente a propriedade Prototype do objeto, às vezes ele tem um certo impacto negativo na propriedade do construtor do objeto.
Portanto, depois de concluirmos o cenário de relacionamento relevante da herança, é um hábito muito bom redefinir os atributos constantes desses objetos de acordo. Como mostrado abaixo:
A cópia do código é a seguinte: twodshape.prototype.constructor = twodshape;
Triângulo.prototype.Constructor = Triangle;
reescrever:
Copie o código da seguinte forma: Shape da função () {}
Shap.prototype.name = 'shape';
Shape.prototype.toString = function () {
retornar este.name;
}
function twodshape () {}
Twodshape.prototype = new Shape ();
Twodshape.prototype.constructor = twodShape;
Twodshape.prototype.name = '2d Shape';
Triângulo da função (lateral, altura) {
this.side = lado;
this.Height = altura;
}
Triângulo.prototype = new TwodShape;
Triângulo.prototype.Constructor = Triangle;
Triângulo.prototype.name = 'Triângulo';
Triângulo.prototype.getarea = function () {
retornar this.side*this.Height/2;
}
Reescreva novamente (passe de referência em vez de passe de valor):
Copie o código da seguinte forma: Shape da função () {}
Shap.prototype.name = 'shape';
Shape.prototype.toString = function () {
retornar este.name;
}
function twodshape () {}
Twodshape.prototype = shape.prototype;
Twodshape.prototype.constructor = twodShape;
Twodshape.prototype.name = '2d Shape';
Triângulo da função (lateral, altura) {
this.side = lado;
this.Height = altura;
}
Triângulo.prototype = twodshape.prototype;
Triângulo.prototype.Constructor = Triangle;
Triângulo.prototype.name = 'Triângulo';
Triângulo.prototype.getarea = function () {
retornar this.side*this.Height/2;
}
Embora a eficiência seja aprimorada, esse método tem um efeito colateral, porque é a passagem de referência, não a passagem de valor, portanto o valor do nome no "objeto pai" é afetado.
O objeto filho e o objeto pai apontam para o mesmo objeto. Portanto, uma vez que o objeto filho altere seu protótipo, o objeto pai também será alterado imediatamente.
Reescrever novamente (usando o construtor temporário):
Copie o código da seguinte forma: Shape da função () {}
Shap.prototype.name = 'shape';
Shape.prototype.toString = function () {
retornar este.name;
}
function twodshape () {}
var f = function () {}
F.prototype = shape.prototype;
Twodshape.prototype = new f ();
Twodshape.prototype.constructor = twodShape;
Twodshape.prototype.name = '2d Shape';
Triângulo da função (lateral, altura) {
this.side = lado;
this.Height = altura;
}
F.prototype = twodshape.prototype;
Triângulo.prototype = new f ();
Triângulo.prototype.Constructor = Triangle;
Triângulo.prototype.name = 'Triângulo';
Triângulo.prototype.getarea = function () {
retornar this.side*this.Height/2;
}
Embora a eficiência seja aprimorada, esse método tem um efeito colateral, porque é a passagem de referência, não a passagem de valor, portanto o valor do nome no "objeto pai" é afetado.
O objeto filho e o objeto pai apontam para o mesmo objeto. Portanto, uma vez que o objeto filho alinhe o protótipo e o modifique, o objeto pai também será alterado imediatamente.
Espero que este artigo seja útil para a programação JavaScript de todos.