Antes de fazer alguma coisa, você deve primeiro ficar claro sobre os benefícios de fazê -lo. Eu acredito que ninguém está disposto a fazer as coisas sem motivo. De um modo geral, quando projetamos aulas, realmente esperamos reduzir a duplicação de código. Usar a herança pode fazer isso perfeitamente. Com a ajuda do mecanismo de herança, você pode projetar novamente com base nas classes existentes e fazer pleno uso dos vários métodos que eles já possuem e modificar o design com mais facilidade. Não vou dizer muita bobagem, dê um exemplo:
A cópia do código é a seguinte:
Função Pessoa (nome) {
this.name = nome;
}
Person.prototype.getName = function () {
retornar este.name;
}
função bloguer (nome, blog) {
Pessoa.call (este, nome);
this.blog = blog;
}
var bloger = new Bloger ("Zhen", "// www.vevb.com");
alert (bloger.name == "Zhenn"); /*Retorne a Ture*/
alert (bloger.blog) /*tip//www.vevb.com*/
alert (bloger.getName () == "zhenn"); /*Dica "bloger.getName não é uma função"*/
A partir do exemplo acima, podemos ver que o blogueiro chama dinamicamente as propriedades e métodos nativos de sua pessoa de classe pai através de uma chamada dentro dela (para a explicação da chamada, consulte //www.vevb.com/article/62086.htm), que pode ser entendido como o blogueiro herde a pessoa e se torna um subclasse. No entanto, os alunos cuidadosos descobrirão que os métodos no objeto de protótipo de pessoa não podem ser herdados, confiando apenas na chamada, e é por isso que ele solicita "bloger.getName não é uma função". Mas não se preocupe, basta lidar com o código acima para resolver esse problema!
A cópia do código é a seguinte:
Função Pessoa (nome) {
this.name = nome;
}
Person.prototype.getName = function () {
retornar este.name;
}
função bloguer (nome, blog) {
Pessoa.call (este, nome);
this.blog = blog;
}
/*Observe as duas linhas a seguir de código*/
Bloger.prototype = new Person ();
Bloger.prototype.constructor = bloguer;
var bloger = new Bloger ("Zhen", "// www.vevb.com");
alert (bloger.name == "Zhenn"); /*Retorne a Ture*/
alert (bloger.blog) /*tip//www.vevb.com*/
alert (bloger.getName () == "zhenn"); /* Promot True*/
Aqui precisamos explicar essas duas linhas de código. Sabemos que cada construtor possui um atributo de protótipo, que aponta para o objeto protótipo do construtor. De fato, o objeto de protótipo também é um objeto de instância, mas os atributos e métodos definidos no objeto de protótipo podem ser fornecidos a todos os objetos de instância a serem compartilhados. A partir disso, podemos ver que a intenção de adicionar duas linhas de código é definir o objeto protótipo da subclasse para apontar para um objeto instanciado da classe pai e o objeto instanciado da classe pai herdará todos os métodos de atributo do protótipo da classe pai, que atinge nosso objetivo. O protótipo da subclasse herda as propriedades e métodos de todos os objetos da instância da classe pai.
No entanto, você também deve observar que o bloger.prototype.constructor = bloguer; Essa linha de código, porque quando o protótipo da subclasse é definido na instância da classe pai, seu atributo construtor apontará para a classe pai, portanto o construtor do protótipo da subclasse precisa ser definido para apontar para a subclasse novamente. Neste ponto, a herança da classe de JavaScript foi perfeitamente implementada!
Para simplificar a declaração de subclasses, todo o processo de extensão de subclasses pode ser escrito em uma função chamada Extend, que é criar uma nova classe baseada em uma determinada estrutura de classe:
A cópia do código é a seguinte:
Função Extend (Classe ChildClass, ParentClass) {
var f = new function ();
F.prototype = parentClass.prototype;
ChildClass.prototype = new F ();
ChildClass.Prototype.Constructor = ChildClass;
}
Com esta função de extensão, você pode estender facilmente a subclasse. Basta chamar essa função. As duas linhas de código adicionadas acima podem ser alteradas para estender (blogueiro, pessoa), que também podem obter herança completa!