Este artículo describe el uso del prototipo en JS. Compártelo para su referencia. El análisis específico es el siguiente:
El fototipo en JS es una parte difícil de entender
Este artículo se basa en los siguientes puntos de conocimiento:
1 Modo de diseño prototipo
En .NET, puede usar clone () para implementar el método prototipo
La idea principal del método prototipo es que ahora hay una clase A. Quiero crear una clase B. Esta clase está prototipo por A y puede ampliarse. Llamamos al prototipo de B A.
2 Los métodos de JavaScript se pueden dividir en tres categorías:
Método de Clase A
B Método de objeto B
Método del prototipo C
Los ejemplos son los siguientes:
Funcion People (name) {this.name = name; Personas ("Windking");3 obj1.func.call (OBJ) Método
Significa considerar OBJ como OBJ1 y el método de llamada FUNC
Ok, los siguientes problemas se resuelven uno por uno:
¿Qué significa prototipo?
Cada objeto en JavaScript tiene un atributo prototipo.
A.Prototype = new B ();
Comprender el prototipo no debe confundirse con la herencia. El prototipo de A es una instancia de B. Se puede entender que un clonado todos los métodos y propiedades en B. A puede usar los métodos y propiedades de B. Lo que se enfatiza aquí es la clonación en lugar de la herencia. Esto puede suceder: el prototipo de A es una instancia de B, y el prototipo de B también es una instancia de A.
Echemos un vistazo a un ejemplo de un experimento:
función baseclass () {this.showmsg = function () {alert ("baseclass :: showmsg");Primero definimos la clase BasecLass, y luego queremos definir la Clase Extentable, pero tenemos la intención de usar una instancia de BasecLass como prototipo para clonar ExtendClass también contiene el método de objeto ShowMsg.
ExtendClass.prototype = new BasecLass () se puede leer como: ExtendClass se crea con una instancia de BasecLass como una clonación prototipo.
Entonces habrá una pregunta, ¿qué pasaría si ExtendClass contiene un método con el mismo nombre que el método de BaseClass?
Aquí hay Experimento extendido 2:
function saClass () {this.showmsg = function () {alert ("baseclass :: showmsg"); Clase :: showmsgEvidencia experimental: cuando se ejecuta una función, primero irá a la función en la ontología para buscar. O se puede entender que el prototipo no clonará las funciones del mismo nombre.
Entonces habrá otra nueva pregunta:
¿Qué pasa si quiero usar una instancia de instancia de ExtendClass para llamar al método de objeto de BasecLass Showmsg?
La respuesta es usar la llamada:
ExtendClass.Prototype = new BaseClass (); var instance = new ExtendClass (); var baseInstance = new BaseClass (); BaseInstance.showmsg.call (instancia); // show baseclass :: showmsg
Here BaseInstance.showmsg.call (instancia);
Ok, alguien puede preguntar aquí por qué no baseclass.showmsg.call (instancia);
Esta es la diferencia entre los métodos de objeto y los métodos de clase.
Finalmente, si el siguiente código se entiende claramente, entonces lo que dice este artículo ya se entiende:
<script type = "text/javaScript"> function saClass () {this.showmsg = function () {alert ("baseclass :: showmsg"); Class () {this.showmsg = function () {alert ("extendClass :: showmsg"); }} ExtendClass.ShowMsg = function () {alert ("ExtendClass :: Showmsg Static")} ExtendClass.Prototype = new BaseClass (); var instancia = new ExtendClass (); instancia.showmsg () // show extendClass :: showmsgbaseclass.showmsg.call (instancia); BaseInstance = new BasecLass (); BaseInstance.Showmsg.Call (instancia); // show baseclass :: showmsg </script>Espero que este artículo sea útil para la programación de JavaScript de todos.