Primeiro, vejamos a herança não convencional: o método de herança da instância.
Eu não digo muita bobagem. Como é herdado pelo não-mainstream, não deve ser usado com frequência. Como não é usado com frequência e ainda existe, existe apenas um fator que é usado em ocasiões específicas. O método de herança de instância é usado principalmente para a herança de objetos principais e também é a única maneira de resolver a herança de objetos principais até agora.
A herança dos objetos principais tem um certo valor. Por exemplo, o objeto de erro. Nossa empresa pode ter que implementar uma classe de erro para simplificar o desenvolvimento futuro. No momento, tenho que usar o método de herança de instância para herdar o erro.
O código é o seguinte:
A cópia do código é a seguinte:
Função ExtendingError (MES)
{
var instância = novo erro (MES);
instance.newError = function () {
alerta ("Seu erro é"+MES);
}
instância de retorno;
}
Ok, teste:
A cópia do código é a seguinte:
var e = new ExtendingError ("Seu número é menor que um");
E.NewError ();
alerta (e.toString ());
Os resultados nos satisfazem:
OK, sem dizer muita bobagem, este é um método de herança não-convencional, que é basicamente usado apenas para a herança de objetos principais, lembre-se!
Em seguida, vamos dar uma olhada no segundo método de herança de cópia: cópia não mainstream.
Como o nome sugere, a herança de cópia significa a herança de objetos através da cópia. O que devo copiar? É óbvio que são as propriedades e métodos do objeto. Você ainda se lembra disso em JavaScript, a classe é realmente uma hashtable? Se você não consegue se lembrar, volte e revise o básico. Posso escrever um artigo sobre objetos JavaScript há algum tempo.
Será mais fácil entender isso, basta olhar para o código:
Primeiro, escreva um método de extensão:
A cópia do código é a seguinte:
Function.prototype.extend = function () {
para (var pro em obj)
{
// Esta é na verdade uma cópia completa das propriedades e métodos da classe pai
this.prototype [pro] = obj [pro];
}
}
Ok, escreva um pedaço de código para ver como usá -lo:
A cópia do código é a seguinte:
função animal ()
{}
função pessoas ()
{}
People.Extend (New Animal ())
{}
Uma pessoa exigente pode ver de relance que as desvantagens desse método são óbvias demais:
Ao copiar os métodos de atributo de um objeto um por um, a reflexão é realmente usada. Não vou dizer muito sobre os danos à eficiência da reflexão.
Como a herança do protótipo, o objeto pai deve ser inicializado. Quando a relação de herança é determinada, mas os parâmetros ainda são incertos, não pode ser reproduzido!
Em suma, esse método geralmente não é usado.
Ok, vamos falar sobre algo comumente usado. Herança mista!
Isso é baseado em dois métodos de herança convencional. Comparando os dois métodos de herança, podemos descobrir que as vantagens e desvantagens dos dois métodos de herança são complementares, por isso é fácil misturá -los!
A cópia do código é a seguinte:
função pessoas (nome)
{
this.name = nome;
this.sayName = function () {
alerta ("meu nome é"+nome);
}
}
Função Girl (nome, idade)
{
// Herança de construção
this.father = pessoas;
this.father (nome);
exclua este.father;
this.Introduce = function () {
alerta ("meu nome é"+nome+". Eu sou"+idade);
}
}
// Herança de protótipo
Girl.Prototype = New People ();
Ok, uma mistura dos dois métodos, agora vamos ver se o problema foi resolvido?
var g = New Girl ("Xuan", 22);
alerta (g instanceof pessoas);
G.SayName ();
G.Introduce ();
Teste passou!
Esta é uma solução relativamente perfeita, mas aumenta a complexidade do código; portanto, a solução específica depende da escolha de todos na prática.
São todas as maneiras de brincar com JavaScript. Todos podem continuar a seguir meus outros artigos.