Eu acho que todo mundo tem suas próprias opiniões sobre se o JavaScript é uma linguagem orientada a objetos ou uma linguagem orientada a objetos. Esses fãs fiéis do JavaScript devem dizer que o JavaScript é uma linguagem orientada a objetos. Por exemplo, a declaração sobre JavaScript no livro "The Return of the King of JavaScript" é baseada no protótipo orientado a objetos. Deixe -me falar sobre minha opinião pessoal. Os três recursos orientados a objetos: herança, polimorfismo e encapsulamento. Embora o JavaScript não seja tão rápido quanto os idiomas orientados a objetos, como Java e C#, também possui certo suporte. Portanto, faz sentido dizer que o JavaScript é uma linguagem orientada a objetos, mas da parte da herança, há uma série de métodos de herança, mas cada método de herança não pode realizar o poder de uma linguagem verdadeiramente orientada a objetos. Portanto, é absurdo dizer que é orientado a objetos. Em resumo, meu entendimento do JavaScript está mais disposto a chamá-lo de um objeto simplificado, orientado a objetos ou "pseudo" (essa pseudo-palavra não tem significado depreciativo).
Hoje, vamos falar sobre o primeiro recurso de Orientado a objetos: herança.
O que é herança? Não quero falar sem sentido sobre isso. Há um animal, uma pessoa e uma garota. Esta é a cadeia de herança mais simples e típica.
Em objetos orientados a objetos, como C#, é fácil.
A cópia do código é a seguinte:
animal de classe
{}
Pessoas de classe: animal
{}
Garota de classe: Pessoas
{}
Então, em JavaScript, não há classe ou herança para fornecer implementação, o que devemos fazer?
Disfarce de objetos (método de herança de construção)
O que é camuflagem do objeto? O que podemos chamar de herança de construção é mais fácil de entender. Como o nome sugere, é usar construtores para brincar com herança. De fato, significa que o construtor da classe pai é considerado um método comum e o coloca no construtor da subclasse para executar. Dessa maneira, ao construir um objeto, o objeto da subclasse pode, obviamente, construir o método da classe pai!
Vamos usar o exemplo acima, o código é o seguinte:
A cópia do código é a seguinte:
função animal ()
{
this.run = function () {alert ("eu posso executar");};
}
função pessoas (nome)
{
// Aqui, o método de construção da classe pai é passado e, em seguida, o método de construção da classe pai é executado. No momento, os métodos na classe pai podem ser usados.
this.father = animal;
this.father ();
// Lembre -se de excluí -lo, caso contrário, quando a subclasse for adicionada ao método com o mesmo nome da classe pai, ele será modificado para a classe pai.
exclua este.father;
this.name = nome;
this.say = function () {alert ("meu nome é"+this.name);}
}
Função Girl (nome, idade)
{
this.father = pessoas;
this.father (nome);
exclua este.father;
this.age = idade;
this.Introduce = function () {alert ("meu nome é"+this.name+". Eu sou"+this.age);};
}
Dessa forma, uma cadeia de herança é implementada e o teste é:
A cópia do código é a seguinte:
var a = novo animal ();
a.run ();
var p = novas pessoas ("Windking");
p.run ();
P.Say ();
var g = New Girl ("Xuan", 22);
g.run ();
G.Say ();
G.Introduce ();
Os resultados são os seguintes:
um.
b.
c.
d.
e.
f.
O teste foi bem -sucedido!
Vamos resumir a chave desse código, especificar a classe pai, declarar o objeto da classe pai e excluir variáveis temporárias. Você acha que é um pouco problemático? Pelo menos é o que eu penso. Depois de esquecer de excluir, tenho que suportar o risco de a classe pai ser modificada. Para isso, usamos chamada e aplicamos para melhorar isso!
Vejamos o código e o exemplo acima (para facilitar a compreensão de todos, a necessidade de alterá -lo, o animal tem um nome):
A cópia do código é a seguinte:
Função Animal (nome)
{
this.run = function () {alert ("eu posso executar");};
}
função pessoas (nome)
{
// Use o método de chamada para implementar a herança
this.father = animal;
this.father.call (este, nome);
this.name = nome;
this.sayName = function () {alert ("Meu nome é"+this.name;);};
}
Função Girl (nome, idade)
{
// Use o método Apply para implementar a herança
this.father = pessoas;
this.father.Apply (esta, nova matriz (nome));
this.age = idade;
this.Introduce = function () {alert ("meu nome é"+this.name+". Eu sou"+this.age);};
}
Usando o mesmo código de teste, verificou -se que o teste foi tão bem -sucedido.
Se você é um novato, pode se sentir um pouco tonto quando olha para os dois códigos abaixo. O que é chamado e o que é aplicado? OK, no tópico especial da herança de Wanzhuan, adicionei uma série de edições suplementares. Se você não entende isso, pode ler meu artigo: "Word of Wanzhuan: ligue e aplique".
O disfarce de objetos é apenas uma maneira de implementar a herança. No próximo artigo, continuarei escrevendo sobre outros métodos de herança e as vantagens e desvantagens de vários métodos de herança. Bem -vindo a continuar prestando atenção.