Revisión de JS (Día02)

Orientado a objetos

Es una especie de idea de programación, el lenguaje de programación que realiza este tipo de idea, también podemos llamarnos orientados a objetos

Tres caracteristicas:

Encapsulación: oculte detalles internos y solo desarrolle interfaces de operación externas (métodos de objetos)

Herencia: un objeto puede heredar los miembros de otro objeto y expandirse sin cambiar el otro objeto.

Polimorfismo: la misma operación actuando sobre diferentes objetos producirá resultados diferentes. (Almacenamiento variable en js)

Objeto:

definición:

Realizado por {}, el miembro del objeto es un par clave-valor, y varios miembros están separados por (coma).

Objeto vacío:

var o1 = {
    
    }

Objeto de miembro único

var o2 = {
    
    
        name:"jack"
    }

Objetos de miembros múltiples

var o3= {
    
    
        name:"jack",
        age:18,
        sex:'男'
        ......
    }

Objeto con miembros y métodos

var o4 ={
    
    
	name:'angle',
	age:25,
	gender:'女',
	say:function(){
    
    
		console.log('hello')
	}
}

Acceso a los miembros del objeto, nombre del objeto, nombre del miembro.

Recorrido de miembros de objeto

para ... en para completar

for(obj in o4)

Énfasis: Copia (duplicación) de objetos.

Copia superficial:

El acceso directo del objeto original se copia en el objeto de copia (el objeto en sí no se copia) y los dos objetos apuntan al mismo espacio de memoria

** Ventajas: ** Puede ahorrar espacio en la memoria

Inserte la descripción de la imagen aquí

Copia profunda:

Realmente cree una copia de un objeto, copie esta copia a otro objeto

Inserte la descripción de la imagen aquí

// 深拷贝
function deepCopy(obj){
    
    
    var p2 = {
    
    }
    for(var k in obj){
    
    
        //遍历obj的成员,判断obj[k]的类型,用到了递归
        p2[k] = (typeof obj[k] === 'object')?deepCopy(obj[k]):obj[k]
    }
    return p2
}

var p3 = {
    
    
    name:'jack',
    age:18,
    subject:{
    
    
        name:['html','css','javascript']
    }
}

var p4 = deepCopy(p3)
console.log(p3 === p4)

p4.name = '猪猪'
console.log(p3)
console.log(p4)

Constructor

Es otra forma de javascript para crear objetos, que es diferente de {}: puede crear varios objetos con las mismas características.

function factory(age,name){
    
    
    var obj = {
    
    }
    obj.name = name;
    obj.age = age;

    return obj;
}

var o1 = factory('曹操',24)
var o2 = factory('刘备',30)

console.log(o1)
console.log(o2)

Inserte la descripción de la imagen aquí

Constructor incorporado de JavaScript

new 构造函数名([形参1,形参2])

Object:new Object()
String:new String('123456')
Date:new Date('2021-03-12')
......

Accede al constructor del objeto:

Constructor a través del objeto

对象名.constructor

Miembro privado

En el constructor, la variable definida con var, la llamamos miembro privado, no se 对象名.成员名puede acceder al miembro privado

var name = 'javaScript'

Para acceder a los miembros privados, se debe anidar una función en el constructor para devolver el valor del miembro privado.

function Person(){
    
    
    var name = 'javaScript'
    //必须加this
    this.getName = function(){
    
    
        return name
    }
}
var o1 = new Person();
console.log(o1.getName())

Esta palabra clave

Se utiliza principalmente en funciones, dependiendo del entorno en el que se llame a la función, el punto de esta será diferente.

1. Al usar la nueva palabra clave para llamar a una función como constructor:

Esto dentro del constructor apunta al objeto recién creado

Inserte la descripción de la imagen aquí

En este momento esto apunta a O1

2. Cuando se llama a una función directamente a través del nombre de la función, esto en la función se refiere al objeto global

Esto en el navegador apunta al objeto de la ventana

3. Si la función se llama como método, esto apunta al objeto.

Cambia la dirección de esto

aplicar()

llamada()

function method(){
    
    
    console.log(this.name)
}
method.apply({
    
    name:'张三'})
method.call({
    
    name:'李四'})

El primero apunta a Zhang San, el segundo apunta a Li Si

Objetos integrados de uso común

Cadena: objeto de cadena

Número: objeto numérico

Math: objeto de operación matemática

Fecha: objeto de fecha y hora

Matriz: objeto de matriz

Prototipo y herencia

Cada vez que se crea una función, sigue un objeto y la función apunta al objeto a través de la propiedad del prototipo.

Prototipo: también conocido como objeto prototipo, se refiere al objeto correspondiente al método

¿Cómo implementar la herencia a través de prototipos?

1. Herencia tradicional, un objeto no tiene una determinada propiedad o método, pero puede obtenerse de otro par

function Person(name){
    
    
    this.name = name
}
Person.prototype.sayHello = function(){
    
    
    console.log('Hello'+this.name)
}
var p1 = new Person('关羽')
p1.sayHello()

Inserte la descripción de la imagen aquí

2. Reemplace el objeto prototipo para lograr la herencia, reemplace el objeto prototipo del constructor con un nuevo objeto, luego el objeto creado basado en el constructor heredará el nuevo objeto prototipo.

function Person(){
    
    }

Person.prototype = {
    
    
    sayHello:function(){
    
    
        console.log('你好,我是新对象')
    }
}

var p = new Person()
p.sayHello()

Inserte la descripción de la imagen aquí

3. Utilice object.create () para lograr la herencia

var obj = {
    
    
    sayHello:function(){
    
    
        console.log('我是一个带有sayHello方法的对象')
    }
}
//相当于newObj继承了obj的功能
var newObj = Object.create(obj)

newObj.sayHello()
// __proto__是寻找它的原型对象
console.log(newObj.__proto__ === obj)

Inserte la descripción de la imagen aquí

Cadena de prototipos

Escriba la descripción de la imagen aquí

img

Los objetos tienen objetos prototipo y los objetos prototipo también tienen sus propios objetos prototipo.Este tipo de estructura de cadena se denomina cadena prototipo.

La esencia de una función es un objeto, por lo que una función también tiene un constructor. Los constructores de todos los objetos integrados son funciones de función

console.log(String.constructor)
console.log(Number.constructor)

Inserte la descripción de la imagen aquí

El objeto prototipo del objeto prototipo: El prototipo del objeto se obtiene mediante 对象.constructor.prototype, porque el atributo del constructor apunta al constructor para formar un bucle, y no se puede acceder al prototipo del objeto prototipo. Para solucionar este problema, algunos navegadores han añadido nuevas propiedades __proto__al objeto para apuntar al prototipo del objeto prototipo (Firefox, Google)

La estructura de la cadena de prototipos.

Las funciones personalizadas, así como las funciones integradas como Objeto, Cadena, Número, etc., son todas creadas por la función de función, que es creada por la propia función de función.

Cada constructor tiene un objeto prototipo, el constructor apunta al objeto prototipo a través del atributo prototipo y el objeto prototipo apunta al constructor a través del atributo constructor.

El objeto de instancia creado por la función constructora hereda del objeto prototipo de la función constructora, y __proto__se puede acceder al objeto prototipo directamente a través de las propiedades del objeto de instancia.

El objeto prototipo del constructor hereda del objeto prototipo de Object, y la __proto__propiedad del objeto prototipo de Object es nula

El operador instanceof se utiliza para detectar si la cadena del prototipo de un objeto contiene el objeto representado por la propiedad del prototipo de un determinado constructor.

Formación

Una colección de datos del mismo tipo.

Crea una matriz

Crear usando un objeto de matriz

var arr = new Array ()

var arr = new Array ('a1', 'a2', 'a3')

Utilice [] para crear una matriz

var tmp = [1,2,3]

Operación básica de matriz

Obtenga la longitud de la matriz

El objeto Array proporciona la propiedad length , que almacena la longitud de la matriz.

Longitud de la matriz = índice de la matriz + 1

Acceso y recorrido de matriz

Acceder a los elementos de la matriz

数组名[索引]

atravesar

para… en… bucle para completar

Array agregar, eliminar, modificar

Agregar: Array name.push (data) Array name.unshift (data)

Modificación: nombre de la matriz [índice] = valor

Eliminar: eliminar el nombre de la matriz [subíndice]

Tipo de matriz

Ordenamiento de burbuja:

// 冒泡排序 12 升序排列
var arr = [10,22,1,24,4,2,13,5,7,3,0,99]
console.log('待排序数组是'+arr)

for(var i=0;i<arr.length;i++){
    
    
    for(var j=0;j<arr.length-i;j++){
    
    
        if(arr[j]>arr[j+1]){
    
    
            // var flag = arr[j+1];
            // arr[j+1] = arr[j];
            // arr[j] = flag
            [arr[j],arr[j+1]] = [arr[j+1],arr[j]]
        }
    }
}
console.log("排序后的数组为"+arr)

Inserte la descripción de la imagen aquí

Tipo de inserción:

Avanzar desde el último elemento

// 插入排序
var arr = [12,1,15,46,23,45,34,22,345]
console.log('需排序数组'+arr)

for (var i = 0;i<arr.length;i++){
    
    
    for(var j = i;j>0;j--){
    
    
        if(arr[j-1]>arr[j]){
    
    
            [arr[j-1],arr[j]] = [arr[j],arr[j-1]]
        }
    }
}

console.log('排序后的为'+arr)

Seleccionar ordenar

for(var i=0;i<arr.length;i++){
    
    
    var min = arr[i];
    var k = i;
    for(var j=i+1;j<arr.length;j++){
    
    
        if(min > arr[j]){
    
    
            min = arr[j];
            k = j;
        }
    }
    if(k !=i){
    
    
        [arr[i],arr[k]] = [arr[k],arr[i]]
    }
}

Métodos de operación de matriz de uso común

Métodos de pila y cola:

push (): agrega nuevos elementos al final de la matriz y devuelve la nueva longitud de la matriz

unshift (): agrega un nuevo elemento al comienzo de la matriz y devuelve la nueva longitud de la matriz

pop (): elimina un elemento del final de la matriz y devuelve undefined si la matriz es nula

shift (): se mueve desde el principio de la matriz y devuelve un elemento, si la matriz es nula, devuelve indefinido

Método de búsqueda:

incluye (): determina si hay un elemento en la matriz, devuelve verdadero si lo hay, falso si no

indexof (): devuelve el primer índice de un elemento dado

lastIndexOf (): devuelve el último valor de índice (subíndice) del elemento dado en la matriz

Array.IsArray () - Juzgando si el valor pasado es una matriz, devuelve: yes -true, not -false

Matriz a cadena:

join (): conecta todos los elementos de la matriz en una cadena

toString (): convierte la matriz en una cadena

otro:

sort (): ordena la matriz y devuelve la matriz (orden ascendente predeterminado)

fill (): completa todos los elementos en el rango de subíndice especificado en la matriz con un valor fijo

reverse (): invierte la posición de todos los elementos de la matriz

splice (): agrega o elimina elementos a la matriz dentro del rango especificado

cancat (): combina dos o más matrices

slice (): copia la matriz en el rango especificado en una nueva matriz

Supongo que te gusta

Origin blog.csdn.net/rraxx/article/details/114728694
Recomendado
Clasificación