Introdução à herança
A herança no JS é um tópico muito complexo, muito mais complexo do que a herança em qualquer outra linguagem orientada a objetos. Na maioria dos outros idiomas orientados a objetos, a herdadora de uma classe requer apenas uma palavra-chave. Para alcançar o objetivo de herdar membros públicos no JS, uma série de medidas precisa ser tomada. JS é uma herança de protótipo. Graças a essa flexibilidade, podemos usar herança baseada em classe padrão ou herança mais sutil do protótipo. Deveria ficar claro no JS que toda a herança é realizada através do protótipo, e o JS é herdado com base em objetos.
herdar:
função animal (nome) {this.name = name; this.showname = function () {alert (this.name); }} função gat (nome) {animal.call (this, nome); } var cat = new Cat ("Black Cat"); cat.showName ();Animal.Call (isto) significa usar objeto animal em vez deste objeto. Então não existe todas as propriedades e métodos de animal em gato? O objeto CAT pode chamar diretamente de métodos e propriedades animais.
Herança múltipla:
função classe10 () {this.showsub = function (a, b) {alert (ab); }} função classe11 () {this.showadd = function (a, b) {alert (a+b); }} function Class2 () {Class10.Call (this); Classe11.call (this); }É muito simples, usando duas chamadas para obter uma herança múltipla
Obviamente, existem outros métodos para herdar JS, como o uso de cadeias de protótipo, que não se enquadram no escopo deste artigo, mas apenas explica o uso da chamada aqui. Falando em escala, é claro que também é aplicado. Esses dois métodos basicamente significam a mesma coisa. A diferença é que o segundo parâmetro de chamada pode ser de qualquer tipo, enquanto o segundo parâmetro de aplicação deve ser uma matriz ou argumentos.
Aqui está uma descrição de como implementar a herança simples em JavaScript?
O exemplo a seguir criará um funcionário da classe de funcionários que herda todas as propriedades no protótipo protótipo da pessoa.
função funcionário (nome, sexo, funcionárioID) {this.name = nome; this.sex = sexo; this.employeid = funcionário;} // apontar o protótipo do funcionário para uma instância de pessoa // porque a instância da pessoa pode chamar métodos no protótipo da pessoa, a instância do funcionário também pode chamar todas as propriedades no protótipo da pessoa. Employee.Prototype = new Person (); Employee.Prototype.getEmployeeId = function () {return this.employeid;}; var zhang = new funcionário ("zhangsan", "man", ""); console.log (zhang.getname ()); // "ZhangsanA implementação acima da herança é difícil e há muitos problemas:
A pessoa é instanciada ao criar o construtor e o protótipo dos funcionários (a seguir denominada classe), o que é inadequado.
O construtor do funcionário não pode chamar o construtor da pessoa da classe pai, resultando em repetidas tarefas de nome e atributos sexuais no construtor do funcionário.
As funções no funcionário substituirão as funções do mesmo nome pessoalmente, sem mecanismos de sobrecarga (e o anterior é o mesmo tipo de problema).
A sintaxe para criar classes JavaScript é muito dispersa e não tão elegante quanto a sintaxe em C#/Java.
Há um erro no apontar do atributo construtor na implementação.