Antes de hacer algo, primero debe ser claro sobre los beneficios de hacerlo. Creo que nadie está dispuesto a hacer las cosas sin razón. En términos generales, cuando diseñamos clases, en realidad esperamos reducir la duplicación del código. El uso de la herencia puede hacer esto perfectamente. Con la ayuda del mecanismo de herencia, puede diseñar nuevamente en función de las clases existentes y hacer un uso completo de los diversos métodos que ya tienen, y modificar el diseño más fácilmente. No diré muchas tonterías, dar un ejemplo:
La copia del código es la siguiente:
Función persona (nombre) {
this.name = name;
}
Persona.prototype.getName = function () {
devolver esto.name;
}
Function Bloger (nombre, blog) {
Persona.call (esto, nombre);
this.blog = blog;
}
var bloger = new Bloger ("Zhen", "// www.vevb.com");
alerta (Bloger.name == "Zhenn"); /*Volver a Ture*/
Alert (Bloger.blog) /*tip//www.vevb.com*/
alerta (Bloger.getName () == "Zhenn"); /*Consejo "Bloger.getName no es una función"*/
Según el ejemplo anterior, podemos ver que el Bloger llama dinámicamente las propiedades y métodos nativos de su persona de clase matriz a través de una llamada dentro (para la explicación de la llamada, consulte //www.vevb.com/article/62086.htm), que puede ser entendido a medida que el bloger hereda la persona y se convierte en una subclasa de la misma. Sin embargo, los estudiantes cuidadosos encontrarán que los métodos en el objeto prototipo de persona no pueden ser heredados confiando únicamente en la llamada, por lo que provoca "Bloger.getName no es una función". Pero no se preocupe, ¡solo lidie con el código anterior para resolver este problema!
La copia del código es la siguiente:
Función persona (nombre) {
this.name = name;
}
Persona.prototype.getName = function () {
devolver esto.name;
}
Function Bloger (nombre, blog) {
Persona.call (esto, nombre);
this.blog = blog;
}
/*Tenga en cuenta las siguientes dos líneas de código*/
Bloger.prototype = new Person ();
Bloger.prototype.Constructor = Bloger;
var bloger = new Bloger ("Zhen", "// www.vevb.com");
alerta (Bloger.name == "Zhenn"); /*Volver a Ture*/
Alert (Bloger.blog) /*tip//www.vevb.com*/
alerta (Bloger.getName () == "Zhenn"); /* indicado verdadero*/
Aquí necesitamos explicar estas dos líneas de código. Sabemos que cada constructor tiene un atributo prototipo, que apunta al objeto prototipo del constructor. De hecho, el objeto prototipo también es un objeto de instancia, pero los atributos y métodos definidos en el objeto prototipo se pueden proporcionar a todos los objetos de instancia para compartir. A partir de esto, podemos ver que la intención de agregar dos líneas de código es establecer el objeto prototipo de la subclase para apuntar a un objeto instanciado de la clase principal, y el objeto instanciado de la clase principal heredará todos los métodos de atributo prototipo de la clase principal, que logra nuestro objetivo. El prototipo de la subclase hereda las propiedades y métodos de todos los objetos de instancia de clase principal.
Sin embargo, también debe tener en cuenta que Bloger.Prototype.Constructor = Bloger; Esta línea de código, porque cuando el prototipo de subclase se establece en la instancia de la clase principal, su atributo de constructor apuntará a la clase principal, por lo que el constructor del prototipo de subclase debe establecerse para apuntar a la subclase nuevamente. ¡En este punto, la herencia de clase de JavaScript se ha implementado perfectamente!
Para simplificar la declaración de subclases, todo el proceso de extender las subclases se puede escribir en una función llamada Extend, que es crear una nueva clase basada en una estructura de clase dada:
La copia del código es la siguiente:
Función Extend (ChildClass, ParentClass) {
var f = nueva función ();
F.Prototype = ParentClass.Prototype;
ChildClass.Prototype = new F ();
ChildClass.Prototype.Constructor = ChildClass;
}
Con esta función de extensión, puede extender fácilmente la subclase. Solo llame a esta función. ¡Las dos líneas de código agregadas anteriormente se pueden cambiar para extender (Bloger, Persona), lo que también puede lograr una herencia completa!