JS es un lenguaje basado en objetos que puede simular lenguajes orientados a objetos como Java | C ++ usando ideas orientadas a objetos.
• Orientado a procesos
◦ DESEGRAR los pasos para resolver el problema
• orientado a objetos
◦ El enfoque de los objetos (contenido y roles) necesarios para resolver el problema, y luego llamar a los métodos relevantes de acuerdo con ciertas reglas de acuerdo con la lógica comercial.
Los objetos se dividen en objetos del sistema y objetos personalizados. Podemos crear objetos del sistema llamando al constructor del sistema, como la matriz | fecha, etc. Los objetos personalizados deben ser creados por sí mismos y no se pueden crear utilizando funciones del sistema.
JavaScript Crear objeto
1. Crear directamente
// Crear directamente // js crea un objeto // 1: crea un objeto vacío var persona1 = nuevo objeto (); // 2: Agregue las propiedades y métodos requeridos del objeto en persona1.name = "aler"; consola .log (persona1.name); persona1.gender = "masculino"; // 3: método agregado a este objeto | (función) persona1. administrador = function () {console .log ("aler es mi nombre de inglés"); } // 4: Método del objeto de llamada: objeto. nombre del método (); persona1.Manager (); // función | método? Cuando una función pertenece a un objeto, la función pertenece al método bajo este objeto; La función se llama a través del nombre del método; // variable | atributo? Cuando una variable pertenece a un determinado objeto, la variable es el método bajo este objeto. Variables de llamada por nombres de atributos. // aumentar la persona1.age = "6"; // Cambiar persona1.name = "limón"; // verificar la consola .log (persona1.name); // Eliminar persona1.age; consola .log (persona1.age); ==> Undefined // Tipo de referencia, Dirección de almacenamiento // Tipo básico: Valor de almacenamiento bit bit/* var arr1 = [1,2,3,4] var arr2 = [5, 6, 7,9]; var arr2 = arr1; // arr2 [0] = 10; // cambia el valor en arr2, arr1 también cambia alerta (arr1 [0]); // ===> 10 Tipo de referencia*/var per2 = new Object (); Per2.name = "Relia"; per2.age = "18"; per2.gender = "femal"; per2.hobby = "limones"; // 1: Propiedades de acceso a través. (sintaxis de puntos) // 2: acceder a las propiedades del objeto a través de [] (soportes cuadrados); Los soportes cuadrados deben ser cadenas o variables de atributo que guarden la cadena de atributos | Use los soportes cuadrados var n = "name" //console.log(per2ile"name"font>) ;//Double cita consola .log (per2 [n]); for (propiedad var en per2) {// console.log (per2 [propiedad]); }Aunque intuitivo, el código es redundante al crear múltiples objetos
2. Cree usando funciones (modo de fábrica)
Para resolver el problema de múltiples declaraciones de objetos similares, podemos usar un método llamado patrón de fábrica, que es resolver el problema de instanciar objetos con una gran cantidad de duplicaciones.
// Definir la función del constructor Createperson (nombre, edad) {// Crear un nuevo objeto vacío var persona = nuevo objeto; // Agregar atributo | Método Person.name = name; persona.AGE = edad; persona. administrador = function () {console .log ("ai"); } // devolver la persona de retorno; } var per1 = createperson ("aier", 12); consola .log (per1.name); var per2 = createperson ("limón", 23); consola .log (per2.age); console.log (PER2 instanceof object); // true console.log (PER2 instanceOf Createperson); // falso // No se puede distinguir el tipo de objeto Console.log (Per2.Manager == Per1.Manager); // Falso Se puede obtener que los espacios abiertos y cerrados de PER1 y PER2 son respectivamenteExcelente: creación a granel de instancias similares
Falta: la instancia utiliza atributos similares, lo que hace que los desechos de la memoria sean públicos y el tipo de objeto no se puede distinguir.
3. Creación literal
Excelente: simple y directo
Falta: No se puede construir objetos similares en lotes
// El objeto creado por los literales no apunta a la instancia, sino a objeto // crear var per1 = {nombre: "aler", constructor: per1, edad: 12, género: "femenino", hobby: "play", eat: function () {console.log (this.name); }} Per1.eat (); // Ailer Per1.name = "Lemon"; Per1.eat (); // Lemon Console.log (typeof PER1); // Object console.log (per1.constructor == objeto); // Verdadero4. Nuevo+constructor
// El constructor crea un objeto, y sus objetos infantiles no son reconocidos por instanciaf. Todos creados con nuevos objetos+obj // se reconocen, pero todavía se desperdicia alguna área de código; ==> Producir creación de prototipo // Crear objeto JS Nuevo+Constructor // 1: Crear constructor | Por lo general, la primera letra es la función capitalizada Createperson (nombre, edad) {// 2: Ajuste los atributos | Método del objeto en este puntero. Cuando se llama a la función para crear un objeto, este puntero apunta a este nuevo objeto; // Esto se agrega a este objeto this.name = name; this.age = edad; /*THIS.speak = function () {// Aquí esto también apunta a la creación objeto console.log (this.name+"hello"); }} /* Createperson.prototype.gender = "20"; Createperson.prototype. ea = function () {console .log (this.name+ "sfd"); }*/// __proto__: IS: el atributo prototipo en el objeto de instancia, apuntando al objeto prototipo correspondiente al constructor correspondiente // [[prototipo]] // llamar var per1 = new Createperson ("Ailer", "20"); var per2 = new Createperson ("Relia", "18"); consola .log (PER1 instancia de createperson); // == Consola verdadera .log (PER2 instancia de createperson); // ==> consola verdadera .log (per1.speak == PER2.speak); // == falso significa que el sistema ha abierto dos áreas de código diferentes, causando desechos de memoria.Es más conveniente crear un literal, por lo que genera un constructor, un constructor normal (patrón de fábrica), y no se reconoce la instancia de subobjetos y la memoria se desperdicia. Use el constructor nuevo+, y se reconoce el subobjeto, pero todavía se duplica algún código, la memoria se desperdicia y el código prototipo se genera para resolverlo.
5. Modo prototipo
function createEnimal (nombre, edad) {//1.2: enlace parámetros externos al atributo de instancia this.name = name; this.age = edad; } //1.3 Atrae el mismo atributo en el prototipo (atributo prototipo, método prototipo) createEnimal.prototype.gender = "masculino"; CreateEnimal.prototype.style = function () {console.log (this.name + "ailers"); }; // 2: llame al constructor para crear un objeto var cat1 = new CreateAnimal ("xiaohua", "2"); var cat2 = new CreateAnimal ("Xiaohua", "2"); Cat1.style (); console.log (cat1.style == cat2.style); // El método hace referencia a la misma dirección, coloque el atributo en el objeto prototipo para guardar la dirección // instancia de la instancia puede determinar qué objeto pertenece a [function] // constructor builder también puede usarlo para determinar qué objeto pertenece a [constructor] [constante] // el objeto de instancia ahorra un atributo de atributo de constructor que apunta a su construcción de constructor /// La diferencia entre console.log (Cat1 instancia de createEnimal); // true console.log (cat1 instanceo de objeto); // true console.log (cat1 instancia de objeto); // true console.log (cat1.constructor == createEnimal); // true.log (cat1.constructor == objeto); // == falso // El prototipo del constructor también tiene un atributo de constructor que se refiere a la función del constructor console.log (createEnimal.prototype.constructor == CreateAnimal); // true // en determina si la propiedad existe en este objeto. Este atributo es un atributo de instancia o prototipo // alerta ("nombre" en cat1) // true // alerta ("género" en cat1); // true // haownproperty: para determinar si una determinada propiedad es un atributo de instancia o heredado del atributo prototipo si es verdadero, de lo contrario no existe | no devuelve falso; console.log (cat1.hasownproperty ("aaa")); // false la propiedad no existente devuelve false console.log (cat1.hasownproperty ("name"));/verdadera instancia propiedad console.log (cat1.hasownproperty ("style")); // false la propiedad de prototeo false // la propiedad de los viajes para encontrar el prototipo ////////Juez de la propiedad de los paternos de los prototipo//Juez de la propiedad de la propiedad de Travel Travel. Prototype Property Tool Class Console.log (isPrototype ("género", cat1)); // Función verdadera ISPrototype (postración, obj) {if (postrado en obj) {if (! obj.hasownproperty (postración)) {return true; } else {return false; }} else {return false; }}/*function isproperty (objeto, propiedad) {// juzga si hay una propiedad en el prototipo return! Object.hasownproperty (propiedad) && (propiedad en objeto);}*/Modo prototipo dinámico
// Inicializar la función prototipo por (nombre, edad, género) {this.name = name; this.age = edad; this.gender = género; // ejecutar solo una vez al inicializar el prototipo if (typeof this.sayname! = "Function") {persona.prototype.sayname = function () {alert (this.name); }}}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.