O primeiro método de protótipo:
// Presiding Class function Person () {this.hair = 'Black'; this.eye = 'preto'; this.skin = 'amarelo'; this.View = function () {return this.hair + ',' + this.eye + ',' + this.skin; }} // Subclasse function man () {this.feature = ['barba', 'forte']; } man.prototype = new Person (); var one = new Man (); console.log (One.Feature); // ['barba', 'Strong'] console.log (One.Hair); // Black Console.log (One.eye); // Black Console.log (One.skin); // amarelo console.log (One.View ()); // preto, preto, amareloEste método é o mais simples. Você só precisa atribuir o valor do atributo de protótipo da subclasse a uma instância herdada e, em seguida, pode usar diretamente o método de classe herdada.
O que significa o atributo do protótipo? Protótipo é o protótipo. Cada objeto (definido por função) possui uma propriedade de protótipo padrão, que é um tipo de objeto.
E esse atributo padrão é usado para implementar a verificação subterrânea da cadeia. Isso significa que, se o atributo de um objeto não existir, o atributo será encontrado através do objeto ao qual o atributo protótipo pertence. E se o protótipo não puder ser encontrado?
O JS encontrará automaticamente o objeto ao qual a propriedade Prototype pertence ao atributo protótipo pertence, para que ele continue indexando através do protótipo até que a propriedade ou o protótipo seja encontrado e finalmente vazio ("indefinido");
Por exemplo, no método One.View () no exemplo acima, o JS procurará primeiro se existe um método View () em uma única instância. Porque não há, ele procura o atributo Man.Prototype, e o valor do protótipo é uma instância da pessoa.
Esta instância possui um método View (), portanto a chamada é bem -sucedida.
A segunda maneira é aplicar:
// Presiding Class function Person () {this.hair = 'Black'; this.eye = 'preto'; this.skin = 'amarelo'; this.View = function () {return this.hair + ',' + this.eye + ',' + this.skin; }} // Subclasse function man () {// Person.Apply (isto, new Array ()); pessoa.Apply (isto, []); this.Feature = ['Beard', 'Strong']; } var one = new Man (); console.log (One.Feature); // ['barba', 'Strong'] console.log (One.Hair); // Black Console.log (One.eye); // Black Console.log (One.skin); // amarelo console.log (One.View ()); // preto, preto, amareloNOTA: Se o parâmetro Aplicar estiver vazio, ou seja, nenhum parâmetro for passado, ele será passado através de novas matrizes () e [], e NULL será inválido.
O terceiro tipo é o protótipo de chamada+:
// Presiding Class function Person () {this.hair = 'Black'; this.eye = 'preto'; this.skin = 'amarelo'; this.View = function () {return this.hair + ',' + this.eye + ',' + this.skin; }} // Subclasse function man () {// Person.Apply (isto, new Array ()); pessoa.call (isto, []); this.Feature = ['Beard', 'Strong']; } man.prototype = new Person (); var one = new Man (); console.log (One.Feature); // ['barba', 'Strong'] console.log (One.Hair); // Black Console.log (One.eye); // Black Console.log (One.skin); // amarelo console.log (One.View ()); // preto, preto, amareloO mecanismo de implementação do método de chamada requer mais um homem.prototype = new Person (); Por que?
Isso ocorre porque o método de chamada implementa apenas a substituição do método e não copia atributos do objeto.
É assim que a API do Google Map herda.
O acima acima resume a implementação de três métodos de herança. Mas cada método tem suas vantagens e desvantagens.
Se a classe pai for assim:
// A pessoa da função da classe pai (cabelo, olho, pele) {this.hair = cabelo; this.eye = Eye; this.skin = pele; this.View = function () {return this.hair + ',' + this.eye + ',' + this.skin; }}Como as subclasses devem ser projetadas para que o Subclass Man passe parâmetros para a pessoa da classe pai enquanto cria objetos. O método de herança de protótipo não é aplicável.
Você deve usar o método Aplicar ou chamar:
// Aplicar método // Subclasse Função Man (cabelo, olho, pele) {Person.Apply (isto, [cabelo, olho, pele]); this.Feature = ['Beard', 'Strong']; } // Call Method // Subclasse Function Man (cabelo, olho, pele) {Person.call (isto, cabelo, olho, pele); this.Feature = ['Beard', 'Strong']; }Mas ainda há desvantagens em usar o método Apply. Por que? No JS, temos um operador muito importante, que é "instância", que é usado para comparar se uma certa direção oposta é de um determinado tipo.
Para este exemplo, além de ser do tipo homem, uma instância também deve ser do tipo pessoa. No entanto, após herdar o método Apply, não se pertence ao tipo de pessoa, ou seja, o valor de (uma instância de pessoa) é falsa.
Depois de tudo isso, a melhor maneira de herdar é o método Call+Prototype. Depois disso, você pode tentar se o valor de (uma instância de Baseclass) é verdadeiro.
O terceiro método de herança também possui falhas: ao subclassificar novos objetos, você deve passar os parâmetros exigidos pela classe pai e as propriedades e métodos na classe pai serão reproduzidos. O seguinte método de herança é perfeito:
função pessoa (nome) {this.name = name; } Pessoa.prototype.getName = function () {return this.name; } função chinesa (nome, nação) {Person.call (este, nome); this.nation = nação; } // Função do método Herito Herito (subclasse, superclass) {função f () {} f.prototype = superclass.prototype; subclass.prototype = new f (); subclass.prototype.constructor = subclass.constructor; } herdar (chinês, pessoa); Chinês.prototype.getNation = function () {return this.nation; }; var p = nova pessoa ('shijun'); var c = novo chinês ("liyatang", "China"); console.log (P); // pessoa {name: "shijun", getName: function} console.log (c); // chinês {name: "liyatang", nação: "China", construtor: function, getNation: function, getName: function} console.log (p.Constructor); // function pessoa (nome) {} console.log (c.Constructor); // function chinês () {} console.log (c instância de chinês); // True Console.log (C instância c); // verdadeiroO artigo acima discute brevemente os três métodos de herança e suas vantagens e desvantagens no JS. Este é todo o conteúdo que compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.