Creo que todos tienen sus propias opiniones sobre si JavaScript es un lenguaje orientado a objetos o un idioma orientado a objetos. Esos fieles fanáticos de JavaScript deben decir que JavaScript es un lenguaje orientado a objetos. Por ejemplo, la declaración sobre JavaScript en el libro "The Return of the King of JavaScript" se basa en un prototipo orientado a objetos. Déjame hablar de mi opinión personal. Las tres características orientadas a objetos: herencia, polimorfismo y encapsulación. Aunque JavaScript no es tan rápido como los idiomas orientados a objetos como Java y C#, también tiene cierto soporte después de todo. Por lo tanto, tiene sentido decir que JavaScript es un lenguaje orientado a objetos, pero de la parte de herencia, hay una serie de métodos de herencia, pero cada método de herencia no puede realizar el poder de un lenguaje verdaderamente orientado a los objetos. Por lo tanto, es descabellado decir que está orientado a objetos. En resumen, mi comprensión de JavaScript está más dispuesto a llamarlo un objeto simplificado orientado a objetos o orientado a objetos "pseudo" (esta pseudo palabras no tiene significado despectivo).
Hoy, hablemos sobre la primera característica de la herencia orientada a objetos.
¿Qué es la herencia? No quiero hablar tonterías sobre esto. Hay un animal, una persona y una niña. Esta es la cadena de herencia más simple y típica.
En orientación a objetos, como C#, es fácil.
La copia del código es la siguiente:
animal de clase
{}
Gente de clase: animal
{}
Chica de clase: gente
{}
Entonces, en JavaScript, no hay clase o herencia para proporcionar implementación, ¿qué debemos hacer?
Disfraz de objetos (método de herencia de construcción)
¿Qué es el camuflaje de objetos? Lo que podríamos llamar la herencia de construcción es más fácil de entender. Como su nombre indica, es usar constructores para jugar con la herencia. De hecho, significa que el constructor de clase principal se considera un método ordinario y lo pone en el constructor de subclase para ejecutar. De esta manera, al construir un objeto, el objeto de subclase puede, por supuesto, construir el método de clase principal.
Usemos el ejemplo anterior, el código es el siguiente:
La copia del código es la siguiente:
función animal ()
{
this.run = function () {alert ("puedo ejecutar");};
}
Función de personas (nombre)
{
// Aquí, se pasa el método de construcción de la clase principal, y luego se ejecuta el método de construcción de la clase principal. En este momento, se pueden usar los métodos en la clase principal.
this.father = animal;
this.father ();
// Recuerde eliminarlo, de lo contrario, cuando la subclase se agrega al método con el mismo nombre que la clase principal, se modificará a la clase principal.
Eliminar esto.
this.name = name;
this.say = function () {alerta ("Mi nombre es"+this.name);}
}
Function Girl (nombre, edad)
{
this.father = gente;
this.father (nombre);
Eliminar esto.
this.age = edad;
this.IntrOduce = function () {alert ("Mi nombre es"+this.name+". I Am"+this.age);};
}
De esta manera, se implementa una cadena de herencia, y la prueba es:
La copia del código es la siguiente:
var a = nuevo animal ();
a.run ();
var p = nuevas personas ("sinuosas");
p.run ();
P.Say ();
var g = nueva chica ("xuan", 22);
g.run ();
G.Say ();
g.introduce ();
Los resultados son los siguientes:
a.
b.
do.
d.
mi.
F.
¡La prueba tuvo éxito!
Resumamos la clave de este código, especifiquemos la clase principal, declaremos el objeto de clase principal y luego elimine las variables temporales. ¿Crees que es un poco problemático? Al menos eso es lo que pienso. Una vez que me olvido de eliminar, tengo que soportar el riesgo de que la clase principal se modifique. ¡Para esto, usamos llamadas y aplicamos para mejorar esto!
Veamos el código y el ejemplo anterior (para facilitar la comprensión de todos, la necesidad de cambiarlo, el animal tiene un nombre):
La copia del código es la siguiente:
Función Animal (nombre)
{
this.run = function () {alert ("puedo ejecutar");};
}
Función de personas (nombre)
{
// Use el método de llamadas para implementar la herencia
this.father = animal;
this.father.call (este, nombre);
this.name = name;
this.sayName = function () {alert ("Mi nombre es"+this.name;);};
}
Function Girl (nombre, edad)
{
// use el método de aplicación para implementar la herencia
this.father = gente;
this.father.apply (this, nueva matriz (nombre));
this.age = edad;
this.IntrOduce = function () {alert ("Mi nombre es"+this.name+". I Am"+this.age);};
}
Usando el mismo código de prueba, se descubrió que la prueba fue igual de éxito.
Si eres un novato, puedes sentirte un poco mareado cuando miras los dos códigos a continuación. ¿Qué es la llamada y qué se aplica? Ok, en el tema especial de la herencia de Wanzhuan, he agregado una serie de problemas complementarios. Si no comprende esto, puede leer mi artículo: "Palabra de Wanzhuan: llame y solicite".
El disfraz de objetos es solo una forma de implementar la herencia. En el próximo artículo, continuaré escribiendo sobre otros métodos de herencia y las ventajas y desventajas de varios métodos de herencia. Bienvenido a continuar prestando atención.