Introducción de herencia
La herencia en JS es un tema muy complejo, mucho más complejo que la herencia en cualquier otro lenguaje orientado a objetos. En la mayoría de los otros idiomas orientados a objetos, heredar una clase requiere solo una palabra clave. Para lograr el propósito de heredar miembros públicos en JS, se deben tomar una serie de medidas. JS es una herencia prototipo. Gracias a esta flexibilidad, podemos usar una herencia estándar basada en clases o una herencia prototipo más sutil. Debe quedarse claro en JS que toda la herencia se lleva a cabo a través del prototipo, y JS se hereda en función de los objetos.
heredar:
function animal (nombre) {this.name = name; this.showname = function () {alert (this.name); }} function Cat (nombre) {animal.call (this, name); } var cat = new Cat ("Cat negro"); cat.showname ();Animal.call (esto) significa usar objeto animal en lugar de este objeto. ¿Entonces no hay todas las propiedades y métodos de animales en CAT? El objeto CAT puede llamar directamente a los métodos y propiedades animales.
Herencia múltiple:
function class10 () {this.showsub = function (a, b) {alert (ab); }} function class11 () {this.showadd = function (a, b) {alerta (a+b); }} function class2 () {class10.call (this); Class11.call (esto); }Es muy simple, usar dos llamadas para lograr múltiples herencias
Por supuesto, existen otros métodos para heredar JS, como el uso de cadenas prototipo, que no caen en el alcance de este artículo, sino que solo explica el uso de llamadas aquí. Hablando de llamadas, por supuesto, también hay aplicados. Estos dos métodos básicamente significan lo mismo. La diferencia es que el segundo parámetro de llamada puede ser de cualquier tipo, mientras que el segundo parámetro de Aplicar debe ser una matriz o argumentos.
¿Aquí hay una descripción de cómo implementar la herencia simple en JavaScript?
El siguiente ejemplo creará un empleado de clase de empleado que herede todas las propiedades en el prototipo prototipo de persona.
Function Employee (nombre, sexo, empleadoid) {this.name = name; this.sex = sex; this.eMployeeId = EmployeeId;} // señala el prototipo de empleado a una instancia de persona // porque la instancia de la persona puede llamar a los métodos en el prototipo de la persona, la instancia de empleado también puede llamar a todas las propiedades en el prototipo de persona. Empleado.prototype = new Person (); Employee.Prototype.GetEmloyeeId = function () {return this.eMployeeId;}; var zhang = nuevo empleado ("zhangsan", "man", ""); console.log (zhang.getName ()); // "ZhangsanLa implementación anterior de la herencia es aproximada y hay muchos problemas:
La persona se instancia al crear constructor y prototipo de empleados (en adelante, denominado clase), lo cual es inapropiado.
El constructor del empleado no puede llamar al constructor de la persona de la clase principal, lo que resulta en asignaciones repetidas de nombre y atributos sexuales en el constructor de empleados.
Las funciones en el empleado anularán las funciones del mismo nombre en persona, sin sobrecargar mecanismos (y el anterior es el mismo problema de tipo).
La sintaxis para crear clases de JavaScript está demasiado dispersa y no tan elegante como la sintaxis en C#/Java.
Hay un error en la señalización del atributo del constructor en la implementación.