En este módulo estudiamos uno de los componentes más importantes de Javascript: los objetos. Object
es el único dato compuesto del lenguaje y de él derivan directamente gran parte del resto de conceptos: listas, clases, errores, etc.
Lo primero que es importante entender es que la igualdad entre objetos funciona por referencia. Es decir, estos dos objetos no son iguales:
const obj1 = { Homer: "Simpson" };
const obj2 = { Homer: "Simpson" };
console.log(obj1 === obj2); // false
Exploramos las consecuencias de este modelo en los ejercicios y aprovechamos para analizar que opciones nativas tenemos para recorrer objetos. Vistos los métodos nativos, implementamos algunos métodos propios para aumentar nuestro abanico de métodos para recorrer objetos:
mapValues
,mapKeys
,
Estudiarmos este método para fusionar objetos en profundidad y aprovecharemos para repasar algunos de los retos que introduce la recursividad con objetos. Crearemos nuestras propias funciones de utilidad para clonar, fusionar y modificar objetos respetando las referencias.
traverse
,clone
,cloneDeep
,mergeDeep
Introducimos el concepto de la desestructuración en el módulo de listas. Veremos que esta herramienta, junto con spread
, también nos sirve para manipular objetos.
Para entender completamente cómo funcionan los objetos y que posibilidades nos permiten es necesario estudiar como funciona el contexto y la palabra reservada this. En esta sección exploramos qué es y como podemos manipularlo utilizando funciones nativas como call
, apply
y bind
.
defineProperty
nos permite tener mucho más control sobre el comportamiento de nuestros objetos. Configurando sus propiedades podemos:
- controlar si las propiedades son visibles (enumerables)
- si las propiedades pueden ser modificadas
- si estas reglas pueden o no ser redefinidas
Introducimos también el concepto de los getters y los setters. Herramientas que podemos utilizar para modificar como se comporta la escritura y la lectura de objetos.
Finalmente, repasamos cómo funciona el sistema de prototipos para entender de qué forma se implementa la orientación a objetos en Javascript.