Ordenemos la encapsulación y la herencia en el objeto JS orientado.
1. Embalaje
Existen muchos métodos de implementación para la encapsulación en JS, y aquí hay algunos usados comúnmente.
1.1 Objeto de generación de patrones original
Escriba a nuestros miembros directamente al objeto y devuélvalos con una función. Desventajas: es difícil ver que es un ejemplo de un patrón.
Código:
La copia del código es la siguiente:
función stu (nombre, puntaje) {
devolver {
Nombre: Nombre,
Puntuación: puntaje
}
}
var stu1 = stu ("zhang san", 80);
var stu2 = stu ("li si", 90);
console.log (stu1.name); // Zhang San
1.2 Generar objetos de patrón construidos
JS nos ayuda a proporcionar un patrón para generar objetos utilizando constructores. El llamado "constructor" es en realidad una función ordinaria, pero esta variable se usa internamente. Cuando la nueva palabra clave se usa para generar una instancia del constructor, esta variable se unirá al objeto de instancia.
Cargue directamente el código:
La copia del código es la siguiente:
función stu (nombre, puntaje) {
this.name = nombre,
this.score = Score
}
var stu1 = new stu ("zhang san", 80);
var stu2 = new stu ("li si", 90);
console.log (stu1.name + "/" + stu2.score); // Zhang San90
console.log ((stu1.constructor == stu) + "/" + (stu2.constructor == stu)); // Verdadero verdadero
console.log ((stu1 instanceof stu) + "/" + (stu2 instanceOf stu)); // Verdadero verdadero
No es difícil ver que el constructor JS genera objetos y C# con clase genera objetos. Ambos usan plantillas para definir los miembros del objeto instanciándolos a través de nuevas palabras clave.
Genere el mismo objeto STU usando el código C#
La copia del código es la siguiente:
Clase STU
{
nombre de cadena pública;
puntaje doble público;
}
Ok, aquí está el objeto básico. Entonces, ahora necesitamos un método donde todos los objetos sean comunes, y solo tenemos este método creado una vez. (No cree repetidamente con el objeto nuevo) ¿Qué debo hacer? Todos saben que en C# podemos usar miembros estáticos. Entonces, ¿cómo hacerlo en JS?
1.3 Modo prototipo
En JS, cada constructor tiene un atributo prototipo, y todas las propiedades y métodos de este objeto serán heredados por la instancia del constructor. Luego, agregar miembros al prototipo directamente es equivalente a declarar un miembro estático en C#.
Código:
La copia del código es la siguiente:
función stu (nombre, puntaje) {
this.name = nombre,
this.score = Score
}
Stu.prototype.type = 'estudiante';
Stu.prototype.log = function (s) {
console.log (s);
}
var stu1 = new stu ("zhang san", 80);
var stu2 = new stu ("li si", 90);
console.log (stu1.type + "/" + stu2.type); // Estudiantes
stu1.log ('hola'); // Hola
console.log (stu1.log == stu2.log); // verdadero
Eso se trata de encapsulación. Echemos un vistazo a cómo se implementa la herencia en JS.
2. Herencia
2.1 Unión del constructor
Llame o aplique métodos directamente en la función infantil para vincular el constructor del objeto principal al objeto infantil.
La copia del código es la siguiente:
función stu (nombre, puntaje) {
Grado.apply (esto, argumentos);
//Grade.call(HIS, argumentos);
this.name = nombre,
this.score = Score
}
Function grado () {
this.code = "Junior High School";
this.ask = function () {
console.log ("Hola a todos");
}
}
var stu1 = new stu ("zhang san", 80);
var stu2 = new stu ("li si", 90);
console.log (stu1.code); // escuela secundaria
stu1.ask (); // Hola a todos
Aplicar hace dos cosas aquí, pon el primer parámetro esto al constructor de grado (llamado) y luego ejecute el código en el grado. Es equivalente a ejecutar a los miembros definidos en grado con esto en Stu nuevamente.
2.2 Herencia a través del prototipo
Mira el código primero
Código:
La copia del código es la siguiente:
función stu (nombre, puntaje) {
this.name = nombre,
this.score = Score
}
Function grado () {
this.code = "Junior High School";
}
Stu.prototype = new grado ();
Stu.prototype.constructor = stu; // prevenir el trastorno de la cadena de herencia y restablecer manualmente la declaración
var stu1 = new stu ("zhang san", 80);
var stu2 = new stu ("li si", 90);
console.log (stu.prototype.constructor); // propio constructor
console.log (stu1.code); // escuela secundaria
Como se mencionó anteriormente, el prototipo es equivalente a los miembros estáticos en C#, por lo que convertimos a todos los miembros de la clase principal en sus propios miembros estáticos para lograr la herencia.
Hay una desventaja de heredar a través del prototipo: todos los miembros heredados son estáticos, entonces, ¿cómo heredar a los miembros del objeto?
2.3 Herencia de copia
Copie todas las propiedades y métodos del objeto principal en el objeto infantil para realizar la herencia.
Código:
La copia del código es la siguiente:
función stu (nombre, puntaje) {
this.name = nombre,
this.score = Score
}
Function grado () {}
Grado.prototype.code = "Junior High School";
}
// Función Encapsulación
función extender (c, p) {
var p = p.prototype;
var c = c.prototype;
para (var i en p) {
c [i] = p [i];
}
}
extender (stu, grado);
var stu1 = new stu ("zhang san", 80);
var stu2 = new stu ("li si", 90);
stu1.code = 'High School';
console.log (stu1.code); // Escuela secundaria
console.log (stu2.code); // escuela secundaria
console.log (stu.prototype.constructor);
console.log (grado.prototype.constructor)
Esto es lo que escribí sobre la organización orientada a objetos JS. Esta cosa no es estática. Cuando lo use, realice cambios de acuerdo con sus necesidades. Hay un dicho que va muy bien, el correcto es el mejor.
Esto solo se analiza para la encapsulación y la herencia. Haremos otros artículos en el futuro para dejar que los amigos tengan una comprensión más profunda de la programación orientada a objetos de JavaScript. Por supuesto, todo es una comprensión personal. Si hay alguna omisión, contácteme.