Escusado será dizer que esse método é relativamente fácil de entender, chamando o construtor da classe pai na subclasse. Além disso, uma das maiores vantagens desse método é que a construção de herança pode alcançar a herança múltipla. Revise este código:
A cópia do código é a seguinte:
função a ()
{}
função b ()
{}
função c ()
{
this.father = a;
this.father ();
exclua este.father;
this.father = b;
this.father ();
exclua este.father;
}
Mas esse método também tem isso e essa desvantagem:
Se você estiver familiarizado com os objetos orientados a objetos, vejamos este código C#:
A cópia do código é a seguinte:
ClassProgram
{
staticVoid Main (String [] args)
{
B b = newb ();
bool temp = (typeof (a)). IsInstanceOftype (b);
Console.WriteLine (temp);
}
}
Classa
{
público a ()
{
}
}
Classb: a
{
público B ()
{
}
}
Qual é o resultado? B é obviamente um exemplo de A:
No entanto, fazemos este teste na seção acima do código JavaScript herdado usando construções:
A cópia do código é a seguinte:
função a ()
{}
função b ()
{}
função c ()
{
this.father = a;
this.father ();
exclua este.father;
this.father = b;
this.father ();
exclua este.father;
}
var c = novo c ();
alerta (c instância c);
Mas os resultados não são o que imaginamos:
De fato, é fácil explicar: a herança construída é apenas uma propriedade da classe pai copiada chamando o método de construção da classe pai. Nenhuma outra pesquisa é feita, muitos materiais não chamam isso de herança do método de herança.
Ao ver as deficiências, lembre -se das vantagens: apoie mais herança.
Quando analisamos a herança de C#, descobrimos que existem duas diferenças mais típicas nessa herança: C# não suporta herança múltipla e as desvantagens da herança construtiva que mencionei acima. Portanto, um novo método de herança foi criado e nos tornamos herança de protótipo.
Quando você vê o nome, pode entender aproximadamente que a herança do protótipo é usar as características dos protótipos para obter herança. Esta é a maneira mais popular de herança em JavaScript. Se você não entende o protótipo, preste atenção em outro artigo meu: "Tocando com o protótipo - protótipo".
Vejamos o código primeiro. Aqui, vou desenhar um pedaço de código de "O Retorno do Rei de JavaScript":
A cópia do código é a seguinte:
ponto de função (dimensional)
{
this.Dimensional = dimensional;
this.test = function () {
alerta ("sucesso");
}
}
função ponto2d (x, y)
{
this.x = x;
this.y = y;
}
Point2d.prototype = new Point (2);
var p = new Point2d (3,4);
p.test ();
O teste passou. Isso mostra que o Point2D herdou o método da classe pai e, em seguida, observe a instância.
alerta (p instanceOf Point);
sucesso! OK, vamos analisar a herança do protótipo:
Não vou falar sobre as vantagens da herança do protótipo. A estrutura é simples, fácil de entender e pode ser instantada. Mas suas deficiências também são significativas. Você se lembra do meu exemplo anterior sobre animais, pessoas e meninas? Utilizamos a herança do protótipo para implementar o seguinte:
A cópia do código é a seguinte:
função animal ()
{
this.run = function () {alert ("eu posso executar");};
}
função pessoas (nome)
{
this.say = function () {alert ("meu nome é"+this.name);}
}
Pessoas.prototype = new Animal ();
Função Girl (nome, idade)
{
this.age = idade;
this.Introduce = function () {alert ("meu nome é"+this.name+". Eu sou"+this.age);};
}
Girl.Prototype = New People (???);
Por favor, preste atenção à linha de código na minha parte em negrito vermelha. As pessoas são o protótipo da garota. Portanto, quando inicializamos as pessoas, devemos passar no parâmetro de nome, mas o nome de cada garota é diferente, para que não haja uso da herança do protótipo: no estágio de herança do protótipo, você não pode determinar quais parâmetros usar para inicializar o objeto da classe pai. Ocasião 2: É muito simples. Cada classe pode ter apenas um protótipo, o que é, a herança do protótipo não pode ser usada para herança múltipla. Isso é uma coisa boa e uma coisa ruim. porque:
Em idiomas orientados a objetos como Java e C#, acredita-se que a herança múltipla não é suportada, e acredita-se que a herança múltipla seja incompatível com a orientação de objetos
Várias interfaces não podem ser implementadas!
Ok, é tudo o que escrevi hoje. Para resumir, a herança do protótipo resolve alguns problemas de herança de construção e introduz alguns novos problemas. No geral, a herança do protótipo é o método de herança mais amplamente utilizado, e também é a maneira de implementar verdadeiramente a herança na gramática JavaScript!