Los objetos son cualquier cosa que la gente quiera estudiar, desde los enteros más simples hasta los aviones complejos, etc., que no solo pueden representar cosas concretas, sino también reglas, planes o eventos abstractos. -COMO DE BAIDU ENCICLOPEDIA
La programación orientada a objetos es el modelo de programación más popular en la actualidad. Pero es frustrante que, como el JavaScript front-end más utilizado, no admita orientado a objetos.
JavaScript no tiene caracteres de control de acceso, no define la clase de palabras clave, no admite extender o colon heredado, y no utiliza virtual para admitir funciones virtuales. Sin embargo, JavaScript es un lenguaje flexible. Echemos un vistazo a cómo JavaScript sin palabras clave implementa la definición de clase y crea objetos.
Defina la clase y cree el objeto de instancia de la clase
En JavaScript, utilizamos la función para definir la clase, como sigue:
La copia del código es la siguiente:
forma de función ()
{
var x = 1;
var y = 2;
}
Podrías decir, ¿dudas? ¿No es esta una función definitoria? Así es, esta es una función definitoria. Definimos una función de forma e inicializamos x e y. Sin embargo, si lo mira desde otra perspectiva, esto es definir una clase de forma, que contiene dos propiedades x e y, y los valores iniciales son 1 y 2 respectivamente. Sin embargo, las palabras clave que definimos la clase son la función en lugar de la clase.
Luego, podemos crear una ashape de objeto de la clase de forma, como sigue:
La copia del código es la siguiente:
var ashape = new Shape ();
Definir propiedades públicas y privadas
Hemos creado Ashape Object, pero cuando intentamos acceder a sus propiedades, recibimos un error como este:
La copia del código es la siguiente:
ashape.x = 1;
Esto muestra que las propiedades definidas con VAR son privadas. Necesitamos usar esta palabra clave para definir los atributos públicos.
La copia del código es la siguiente:
forma de función ()
{
this.x = 1;
this.y = 2;
}
De esta manera, podemos acceder a las propiedades de forma, como:
La copia del código es la siguiente:
ashape.x = 2;
Ok, podemos resumir del código anterior: usar VAR para definir el atributo privado de la clase y usarlo para definir el atributo público de la clase.
Definir métodos públicos y privados
En JavaScript, una función es una instancia de la clase de función, y la función se hereda indirectamente del objeto, por lo que una función también es un objeto. Por lo tanto, podemos crear una función utilizando el método de asignación. Por supuesto, también podemos asignar una función a una variable de atributo de la clase. Luego, esta variable de atributo se puede llamar método porque es una función ejecutable. El código es el siguiente:
La copia del código es la siguiente:
forma de función ()
{
var x = 0;
var y = 1;
this.draw = function ()
{
//imprimir;
};
}
Definimos un sorteo en el código anterior y le asignamos una función. A continuación, podemos llamar a esta función a través de Ashape, que se llama método público en OOP, como:
La copia del código es la siguiente:
ashape.draw ();
Si se define con VAR, entonces el sorteo se vuelve privado, que se llama método privado en OOP, como:
La copia del código es la siguiente:
forma de función ()
{
var x = 0;
var y = 1;
var draw = function ()
{
//imprimir;
};
}
De esta manera, no puede usar Ashape.Draw para llamar a esta función.
Constructor
JavaScript no admite OOP, por lo que, por supuesto, no hay constructor. Sin embargo, podemos simular un constructor nosotros mismos y hacer que el objeto se llame automáticamente cuando se crea. El código es el siguiente:
La copia del código es la siguiente:
forma de función ()
{
var init = function ()
{
// Código de constructor
};
init ();
}
Al final de la forma, llamamos artificialmente la función init. Luego, al crear un objeto de forma, Init siempre se llamará automáticamente, lo que puede simular nuestro constructor.
Constructor con parámetros
¿Cómo hacer que el constructor tome parámetros? De hecho, es muy simple. Simplemente escriba los parámetros que se pasarán en la lista de parámetros de función, como:
La copia del código es la siguiente:
forma de función (ax, ay)
{
var x = 0;
var y = 0;
var init = function ()
{
//Constructor
x = ax;
y = ay;
};
init ();
}
De esta manera, podemos crear el objeto como este:
La copia del código es la siguiente:
var ashape = nueva forma (0,1);
Propiedades estáticas y métodos estáticos
¿Cómo definir propiedades y métodos estáticos en JavaScript? Como se muestra a continuación:
La copia del código es la siguiente:
forma de función (ax, ay)
{
var x = 0;
var y = 0;
var init = function ()
{
//Constructor
x = ax;
y = ay;
};
init ();
}
Shape.count = 0; // Definir un recuento de propiedades estáticas, que pertenece a la clase, no al objeto.
Shap.staticMethod = function () {}; // Definir un método estático
Con propiedades y métodos estáticos, podemos acceder a él con nombres de clases, de la siguiente manera:
La copia del código es la siguiente:
alerta (ashape.count);
Ashape.staticMethod ();
Nota: Las propiedades y los métodos estáticos son públicas. Hasta ahora, no sé cómo hacer que las propiedades y métodos estáticos sean privados ~
Acceder a propiedades públicas y privadas de esta clase en un método
Acceder a sus propias propiedades en los métodos de clase. Los métodos de acceso de JavaScript para propiedades públicas y privadas son diferentes. Consulte el siguiente código:
La copia del código es la siguiente:
forma de función (ax, ay)
{
var x = 0;
var y = 0;
this.gx = 0;
this.gy = 0;
var init = function ()
{
x = ax; // Agregar atributos privados y escribir el nombre de la variable directamente
y = ay;
this.gx = ax; // Para acceder a los atributos públicos, debe agregar esto antes del nombre de la variable.
this.gy = ay;
};
init ();
}
Cosas a tener en cuenta sobre esto
Según mi experiencia, esto en la clase no siempre señala nuestro objeto en sí. La razón principal es que JavaScript no es un lenguaje OOP, y las funciones y clases están definidas por funciones, lo que, por supuesto, causará algunos problemas menores.
La situación en la que este puntero señala incorrectamente es generalmente en el procesamiento de eventos. Queremos que la función miembro de cierto objeto responda a un evento. Cuando se activa el evento, el sistema llamará a nuestra función de miembro. Sin embargo, el aprobado de este puntero ya no es nuestro propio objeto. Por supuesto, será un error llamar a esto en la función miembro en este momento.
La solución es guardar esto en una propiedad privada al comienzo de la clase de definición. Más tarde, podemos usar esta propiedad en lugar de esto. Estoy usando este puntero con este método es bastante seguro y sin preocupaciones ~
Modificemos el código para resolver este problema. Al comparar el código en la Parte 6, definitivamente comprenderá:
La copia del código es la siguiente:
forma de función (ax, ay)
{
var _This = this; // Guarde esto y use _Es en lugar de esto en el futuro para que no se confunda con esto
var x = 0;
var y = 0;
_THIS.GX = 0;
_THIS.GY = 0;
var init = function ()
{
x = ax; // Agregar atributos privados y escribir el nombre de la variable directamente
y = ay;
_THIS.GX = AX; // Para acceder a los atributos públicos, debe agregar esto antes del nombre de la variable.
_THIS.GY = AY;
};
init ();
}
Arriba hablamos sobre cómo definir clases en JavaScript, crear objetos de clase, crear propiedades y métodos públicos y privados, crear propiedades y métodos estáticos, simular constructores y discutir este error propenso.
Eso se trata de la implementación de OOP en JavaScript. Lo anterior es el contenido más práctico. En general, JavaScript define las clases, y usar el código anterior para crear objetos es suficiente. Por supuesto, también puede usar Mootols o prototipo para definir clases y crear objetos. He usado el marco Mootols y se siente muy bien. Es más perfecto para la simulación de clase JavaScript y admite la herencia de clase. Los lectores interesados pueden probarlo. Por supuesto, si usa un marco, debe incluir archivos de encabezado JS relevantes en su página web. Por lo tanto, todavía espero que los lectores puedan crear clases sin un marco. De esta manera, el código es más eficiente, y también puede ver que no es problemático crear una clase simple ~