La herencia de prototipos en JavaScript es un mecanismo que permite a los objetos compartir propiedades y métodos. Es un tipo de herencia orientada a objetos que se basa en prototipos en lugar de clases.
Cada objeto en JavaScript tiene una propiedad interna especial llamada [[Prototype]], que es simplemente una referencia a otro objeto. Cuando se intenta acceder a una propiedad que no existe en un objeto, JavaScript intenta buscar esa propiedad en el [[Prototype]] de ese objeto.
Si el [[Prototype]] tiene esa propiedad, entonces se utiliza el valor de esa propiedad. Si no, entonces JavaScript busca en el [[Prototype]] de ese [[Prototype]], y así sucesivamente hasta que se llega a un objeto cuyo [[Prototype]] es null. Si la propiedad no se encontró en toda la cadena de prototipos, entonces la propiedad es indefinida.
Esta cadena de prototipos es esencialmente una forma simple de herencia. Un objeto puede heredar propiedades de su prototipo, el prototipo de su prototipo, y así sucesivamente.
Un ejemplo práctico podría ser la creación de un objeto “Animal” con propiedades y métodos que luego se comparten con los objetos “Perro” y “Gato”. Si luego se intenta acceder a un método que no existe en “Perro” pero sí en “Animal”, JavaScript buscará a lo largo de la cadena prototípica hasta encontrarla (o devolver undefined si no se encuentra).