JavaScript de Cero a Experto / POO en JS
Prototipos sin miedo: la maquinaria bajo las clases
"Prototipo" es la palabra que más asusta de JavaScript — y hoy pierde el misterio. Es apenas esto: cuando le pides a un objeto algo que no tiene, JavaScript lo busca en OTRO objeto de respaldo. De esa idea simple cuelga todo el lenguaje: tus clases, los métodos de array que usas a diario, y un par de misterios que arrastras desde el módulo 5.
El manual compartido
Sigue la búsqueda de a.esCaro(): JavaScript mira la libreta de a (no
está), sube al manual Gasto.prototype (¡ahí está!) y la ejecuta con
this = a — la regla 1 de la lección pasada, intacta. Por eso a.esCaro === b.esCaro es true: mil instancias, UNA función. El molde de la
lección 1 por fin muestra su mecanismo: class es la forma bonita de
poner métodos en un prototipo compartido.
Los misterios resueltos
Con la cadena en la mano, se destapan casos que llevas meses usando:
El famoso "[object Object]" del módulo 5 era esto: al convertir un
objeto a texto, JavaScript sube por la cadena, encuentra el toString
genérico de Object.prototype, y ese devuelve su saludo inútil. Y cada
map, filter, toUpperCase que has escrito era una consulta al manual
de su estación — Array.prototype, String.prototype. Los prototipos no
eran un tema nuevo: eran el suelo que ya pisabas.
Nota honesta de oficio: hoy casi nunca tocarás prototipos DIRECTAMENTE —
las clases son la interfaz moderna y con ellas te basta. Entenderlos te
sirve para tres cosas reales: depurar (el inspector te muestra la cadena
al expandir cualquier objeto), leer código anterior a 2015 (verás
Gasto.prototype.esCaro = function... — mismo mecanismo, sintaxis vieja),
y responder LA pregunta de entrevista. Modificar Array.prototype u
Object.prototype a mano, jamás: es sabotear el manual general de todos.
En una entrevista te preguntan: si creas 1.000 instancias con new Gasto(...), ¿cuántas copias del método esCaro existen en memoria?
Mini-reto
Explora la cadena con tus manos: 1) crea un array y recorre su cadena de
prototipos con el while del playground — ¿cuántos eslabones tiene y
cómo se llaman?; 2) comprueba con Object.hasOwn que length SÍ es
propio del array pero push no; 3) el experimento estrella: dale a tu
clase Gasto un toString() propio que devuelva el resumen del gasto, y
comprueba que `${gasto}` en un template literal ahora imprime algo
útil — acabas de TAPAR el método del manual general con uno de tu
estación. Ese fenómeno tiene nombre, y es el tema de la próxima lección.
Qué sigue
"Tapar" un método del respaldo con uno propio es la semilla de algo más
grande: moldes que EXTIENDEN moldes. Un Movimiento general, y sobre él
Gasto e Ingreso que heredan lo común y redefinen lo suyo. Próxima
lección: herencia con extends, super e instanceof.