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
Copia profunda:
Realmente cree una copia de un objeto, copie esta copia a otro objeto
// 深拷贝
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)
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
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()
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()
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)
Cadena de prototipos
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)
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)
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