Este artigo descreve o uso do protótipo no JS. Compartilhe para sua referência. A análise específica é a seguinte:
O fototipo em JS é uma parte difícil do JS para entender
Este artigo é baseado nos seguintes pontos de conhecimento:
1 Modo de design de protótipo
No .NET, você pode usar o clone () para implementar o método de protótipo
A idéia principal do método do protótipo é que agora existe uma classe A. Quero criar uma classe B. Esta classe é prototipada por A e pode ser expandida. Chamamos o protótipo de B.
2 métodos JavaScript podem ser divididos em três categorias:
Classe A Método
b Método do objeto
C Método do protótipo
Exemplos são os seguintes:
função pessoas (nome) {this.name = name; 1 = novas pessoas (Windking ");3 OBJ1.FUNC.CALL (OBJ) Método
Significa considerar obj como obj1 e chamar o método func
OK, os seguintes problemas são resolvidos um por um:
O que significa protótipo?
Cada objeto no JavaScript possui um atributo de protótipo.
A.Prototype = new B ();
A compreensão do protótipo não deve ser confundido com a herança. O protótipo de A é uma instância de B. Pode -se entender que um clonado todos os métodos e propriedades em B. A pode usar os métodos e propriedades de B. O que é enfatizado aqui é a clonagem e não a herança. Isso pode acontecer: o protótipo de A é uma instância de B, e o protótipo de B também é uma instância de A.
Vamos dar uma olhada em um exemplo de experimento:
function baseclass () {this.showmsg = function () {alert ("Baseclass :: showmsg");Primeiro, definimos a classe Baseclass e depois queremos definir o ExtentClass, mas pretendemos usar uma instância de base de base como protótipo para clone estendclass também contém o método do objeto ShowMSG.
estendclass.prototype = new Baseclass () pode ser lido como: ExtendClass é criado com uma instância de Baseclass como um protótipo de clonagem.
Depois, haverá uma pergunta: o que aconteceria se o próprio estendclass contiver um método com o mesmo nome que o método do grupo de bases?
Aqui está o Experimento estendido 2:
function baseclass () {this.showmsg = function () {alert ("Baseclass :: showmsg"); ExtendClass :: ShowmsgEvidência experimental: Quando uma função está em execução, ele primeiro será a função na ontologia para pesquisar. Ou pode -se entender que o protótipo não clonará as funções com o mesmo nome.
Então haverá outra nova pergunta:
E se eu quiser usar uma instância do ExtendClass para chamar o método de objeto do Baseclass ShowMSG?
A resposta é usar a chamada:
estendclass.prototype = new Baseclass (); var instance = new ExtendClass (); var BaseInstance = new Baseclass (); BaseInstance.Showmsg.Call (Instância); // Show Baseclass :: Showmsg
Aqui BaseInstance.Showmsg.Call (Instância);
Ok, alguém pode perguntar aqui por que não baseclass.showmsg.call (instância);
Essa é a diferença entre os métodos de objeto e os métodos de classe.
Finalmente, se o código a seguir for entendido claramente, o que este artigo diz já é entendido:
<script type = "text/javascript"> função baseclass () {this.showmsg = function () {alert ("baseclass :: showmsg"); } function extendClass () {this.showmsg = function () {alert ("extendclass :: showmsg"); }} estendclass.showmsg = function () {alert ("extendclass :: showmsg static")} Extendclass.prototype = new Baseclass (); var, new ExtlendClass (); ; BaseInstance = new Baseclass (); BaseInstance.showmsg.call (Instância); // Mostra Baseclass :: Showmsg </script>Espero que este artigo seja útil para a programação JavaScript de todos.