Existe um princípio famoso para a reutilização do código, proposta pelo GOF: a prioridade é usada para usar combinações de objetos em vez de herança de classe. No JavaScript, não há conceito de classes, portanto, a reutilização do código não se limita à herança de classe. Existem muitas maneiras de criar objetos no JavaScript, incluindo construtores, você pode usar novos para criar objetos e modificar dinamicamente objetos. Também existem muitos métodos para reutilizar a herança não classificada (que pode ser chamada de modo de herança moderna) no JavaScript, como a combinação de outros objetos em objetos necessários, tecnologia de mistura de objetos, empréstimos e reutilização dos métodos necessários.
Modo de herança de herança clássica
Exemplos de dois construtores pais e filhos:
A cópia do código é a seguinte:
função pai (nome) {
this.name = nome || "adam";
}
Parent.prototype.say = {
retornar este.name;
};
função filho (nome) {
}
herdar (criança, pai);
A seguir, é apresentado um método de implementação da função reutilizável HERIT ():
A cópia do código é a seguinte:
função herdeira (c, p) {
C.prototype = new p ();
}
Aqui, a propriedade Prototype deve apontar para um objeto, não uma função, portanto, deve apontar para uma instância criada pelo construtor pai, não ao próprio construtor.
Depois disso, ao criar um objeto filho, ele obterá suas funções da instância pai através do protótipo:
A cópia do código é a seguinte:
Var Kid = New Child ();
Kid.Say (); // "Adam"
Ligue para a cadeia de protótipo herdada:
Além disso, adicione as propriedades do garoto:
A cópia do código é a seguinte:
Var Kid = New Child ();
Kid.Name = "Patrick";
Kid.Say (); // "Patrick"
Alterações na cadeia de protótipos:
Você pode encontrar o nome nas propriedades do seu objeto, para não precisar mais procurar a cadeia de protótipo.
Uma das desvantagens do uso do padrão acima é que ele herda as propriedades de dois objetos ao mesmo tempo, a saber, as propriedades adicionadas a isso e às propriedades do protótipo. Na maioria das vezes, esses atributos de si mesmo não são necessários.
Outra desvantagem é que o uso de herd () herd () herança não suporta parâmetros de passagem para os subconstrutores, por exemplo:
A cópia do código é a seguinte:
var s = new Child ("Seth");
S.Say (); // "Adam"
Este resultado não é esperado. Embora o construtor infantil possa passar os parâmetros para o construtor pai, esse mecanismo de herança deve ser reexecionado toda vez que um objeto infantil for necessário, e é ineficiente porque o objeto pai será recriado.
Este artigo termina aqui. Continuaremos atualizando os modos restantes do modo de reutilização de código JavaScript no futuro.