Prototipos y herencias

Clase 75 de 80Curso de JavaScript Desde Cero

Contenido del curso

Primeros Pasos

Funciones y This

Resumen

Entender la relación entre prototipos y herencia es fundamental para trabajar con JavaScript y programación orientada a objetos. Estos dos conceptos determinan cómo se comparten propiedades y métodos entre objetos, y dominarlos marca la diferencia entre escribir código repetitivo y escribir código eficiente.

¿Qué diferencia hay entre objetos con prototipos y herencia?

JavaScript funciona con objetos y prototipos, mientras que la programación orientada a objetos tradicional se basa en herencia [0:12]. Aunque ambos mecanismos permiten reutilizar código, operan de manera distinta bajo la superficie.

Una clase constructora (o función constructora) actúa como un molde [0:28]. Dentro de ese molde se definen propiedades y métodos que después se utilizan para rellenar con información cada vez que se crea una nueva instancia.

¿Qué es un prototipo en JavaScript?

Cada vez que se trabaja con clases o funciones constructoras, JavaScript genera automáticamente un prototipo [0:48]. Este prototipo contiene todas las propiedades y métodos que se van a compartir o heredar en las instancias creadas a partir de la clase principal.

  • El prototipo es un objeto interno que JavaScript asocia a cada constructor.
  • Las instancias acceden a los métodos del prototipo sin necesidad de duplicarlos.
  • Esto optimiza el uso de memoria, porque el método existe una sola vez en el prototipo.

¿Cómo se crea una instancia a partir de una clase?

Supongamos que tenemos una clase llamada Persona con ciertas propiedades y métodos. Al crear una instancia, le damos datos concretos [1:08]:

  • Nombre: José.
  • Edad: treinta años.
  • Altura: uno setenta.
  • Nacionalidad: colombiano.

Esa instancia, José, no necesita que le generemos manualmente cada método. Si la clase padre ya tiene definido un método llamado saludar, José lo hereda directamente gracias al prototipo [1:22].

¿Cómo funciona la herencia de métodos en la práctica?

El método saludar existe en la clase padre, no en la instancia de José. Cuando José ejecuta la acción de saludar, el resultado sería algo como: «Hola, mi nombre es José, ¿cómo te llamas tú?» [1:42].

Esto sucede porque JavaScript busca el método primero en la propia instancia y, si no lo encuentra, sube por la cadena de prototipos hasta dar con él en la clase constructora original.

  • No es necesario reescribir métodos en cada instancia.
  • El prototipo generado por la clase constructora permite que todas las instancias compartan los mismos métodos.
  • Esto representa el concepto de herencia: la instancia recibe comportamientos definidos en la clase padre sin código adicional [1:56].

¿Por qué es importante distinguir clase padre e instancia?

La clase padre funciona como el molde general con propiedades y métodos reutilizables. La instancia es la versión concreta con datos específicos. Gracias a este modelo:

  • Se evita la duplicación de lógica.
  • Se mantiene un punto único de cambio: modificar el método en la clase padre actualiza el comportamiento de todas las instancias.
  • Se aprovecha el sistema de prototipos que JavaScript implementa de forma nativa.

En resumen práctico, cuando defines un método como saludar en tu clase constructora, cada instancia que crees —sea José, María o cualquier otra persona— podrá ejecutar ese método sin que tengas que escribirlo nuevamente. El prototipo se encarga de que la herencia funcione de forma transparente.

Si ya estás creando tus primeras clases en JavaScript, prueba a definir métodos en la clase padre y observa cómo las instancias los heredan automáticamente. Comparte tu experiencia o dudas en los comentarios.