# Javascript Avanzado
# Clases
1. ¿Qué es una clase?
2. Atributos y métodos
3. Constructor
4.- this.
5. Instancia
6. Herencia
7. Polimorfismo
## ¿Qué es una clase?
JavaScript no es un lenguaje orientado a objetos, es más un lenguaje de propósito general, pero con el paso del tiempo _javascript_ ha intentado integrar la programación orientada a objetos.
Una clase es un modelo creador a partir de las caracteristicas de una abstracción de un objeto, una clase puede tener caracterísicas (atributos) y puede realizar acciones (métodos).
Ejemplo:
```
class Persona {
}
```
El nombre de las clases siempre debe comenzar en mayúsculas, adicionalmente se puede usar _camelCase_.
## Métodos y atributos
### Atributos
Los atributos son aquellos que definen las cualidades de algo, por ejemplo los atributos de una persona son:
- Nombre
- Apellidos
- Edad
Estos atributos son los que definen a una persona.
### Métodos
Los métodos son las acciones que se pueden realizar, tomando como ejemplo a una persona, una persona puede:
- Caminar
- Hablar
- Saltar
- Escribir
-
Los métodos son todo aquello que puede hacer un modelo o clase.
Ejemplo:
```
class Persona {
nombre;
apellidos;
edad;
correr(){}
caminar(){}
saltar(){}
escribir(){}
}
```
### Constructor
La tarea de un constructor es inicializar el objeto a partir de una instancia a la clase, a este constructor se le asignan los valores iniciales del nuevo objeto.
Ejemplo:
```
class Persona {
nombre;
apellidos;
edad;
constructor(nombre, apellido, edad) {
}
correr(){}
caminar(){}
saltar(){}
escribir(){}
}
```
### this
El operado _this_ hace referencia a alguna propiedad dentro de donde se encuentre, esta referencia puede abarcar desde un atributo hasta un método.
```
class Persona {
nombre;
apellidos;
edad;
constructor(nombre, apellido, edad) {
this.nombre = nombre;
this.apellidos = apellido;
this.edad = edad;
}
correr(){}
caminar(){}
saltar(){}
escribir() {
this.nombre = "Jorge";
this.escribir()M
}
}
```
**Actividades:** Realizar una clase con al menos 4 atributos y 2 métodos
### instancia
Una instancia es crear un nuevo objeto de una clase, este nuevo objeto tendrá todas las caracteristicas de la clase.
Ejemplo:
`let nuevaPersona = new Persona('John', 'Doe', 30);`
### Herencia
En el mundo de la programación orientada a objetos (POO) existe algo llamado herencia, la cual tiene ese nombre debido a que una clase padre hereda todas sus características a una nueva clase hija, estas características son tanto métodos como atributos y estos mismos se suman a los nuevos métodos y atributos de la clase hija, para este ejemplo , utilizaremos una nueva clase llamada Alumno la cual heredará los métodos y atributos de la clase Persona, que en este caso actuaría como clase Padre, para afirmar que una clase hereda se usa la palabra reservada _extends_, esta se colocará después del nombre de la clase.
```
class Alumno extends Persona {
boleta;
escuela;
constructor(boleta,escuela) {
this,escuela = escuela;
this.boleta = boleta
}
estudiar() {}
}
```
### Polimorfismo
El polimorfismo se refie a que un objeto pueda actuar de diferentes formas y no solo de una forma.
```
let p1 = new Persona("Mike", "Williams", 2);
let p2 = new Persona("John", "Doe", 4);
p1.escribir("name");
p2.escribir("another name");
```
**Actividades:** Hacer una instancia de la clase que crearon la clase anterior y crear una nueva que reciba herencia de esa clase.
# Try catch
Con este bloque de codigo que señala un bloque de instrucciones a intentar (try), y especifica una respuesta si se produce una excepción (catch).
catch solo se ejecuta si dentro del try ocurre un error.
Ejemplo
```
const numeros = [0,1,2,3,4,5,6]
try{
numeros.forEach((e) => e>5)
}catch(error){
console.log(error)
}
```
# Modules
Los módulos son partes de código que se pueden usar en varios archvios , estos modules se usan en proyectos un poco mas grandes que llegan a usar mas de 1 archvio de JS
```
export function suma (n1,n2){
return n1+n2
}
```
Para importar algun modulo que vayamos a usar , usaremos la siguiente syntaxis
```
import {suma} from './index.js'
```
# Object
1. keys
2. values
3. Entries
### Keys
La propiedad del constructor Object "keys" devuelve un arreglo de valores con el indice
```
const n = ["a","b","c","d"]
console.log(Object.keys(n))
```
### Values
La propiedad del constructor Object "value" devuelve un arreglo de valores de cada indice
```
const n = ["a","b","c","d"]
console.log(Object.values(n))
```
### Entries
La propiedad del constructor Object "entries" devuelve un arreglo que tiene dos valores en cada casilla , [value,index]
```
const n = ["a","b","c","d"]
console.log(Object.entries(n))
```
# El DOM (Document Object Model)
> El dom son los elenmentos con los que se puede interactuar en el navegador, gracias a este podemos crear aplicaciones reactivas y no solo estáticas.
>
**Actividad:** Consumir la API y crear una interfaz con esos mismos datos de la api, utilizando Drag and drop
# LocalStorage
1. ¿Qué es el local Storage?
2. Guardar valores en el local Storage
3. Obtener valores del local Storage
4. Borrar valores de local Storage
## ¿Qué es local storage?
_Local Storage_ nos permite guardar informacion del momento dentro del navegador.
## Guardar valores en local storage
Para guardar valores en _local Storage_ debemos guardarlos con el método `localStorage.setItem()` dentro de los paréntesis podemos especificar el nombre del _item_ y el otro parámetro es el valor, normalmente se guarda con formato _JSON_, para eso usamos un convertirdor proporcionado por _JSON_ el método `JSON.stringify();`
Ejemplo:
`localStorage.setItem('item', JSON.stringify(Persona))`
## Obtener valores de local storage
En caso de tener datos almacenados en _local storage_ podemos extraerlos de esta forma: `localStorage.getItem("item")`
Así obtendremos los datos previamente almacenados en _local storage_.
## Borrar valores de local Storage
Para borrar elementos del _localStorage_ existen dos métodos, `removeItem()` y `clear()`.
1.- `localStorage.removeItem()` Obtiene un elemento apartir de un nombre lo selecciona y a partir del nombre y posteriormente lo borra del _local storage_.
2.- `localStorage.clear()` , elimina todos los elementos dentro del _local Storage_ dejándolo completamente vacío.
**Actividad:** Guardar datos de un usuario en _local Storage_ y obtener los valores con las funciones de `getItem()`