002. Herencia prototípica

En el capítulo anterior estuvimos viendo una introducción a la POO (programación orientada a objetos) y a que Javascript es un lenguaje que utiliza el paradigma de la programación orientada a objetos no como la mayoría de los lenguajes basados en clases, sino basado en prototipos. También vimos como crear una función constructora que genere un prototipo, y además como optimizar la creación de métodos para estos prototipos, para que cuando estemos generando objetos, es decir, instancias de nuestra función prototípica, ahorremos memoria de nuestra aplicación al no duplicar en espacio de memoria los métodos que se pueden asignar directamente a los prototipos.

Herencia

La herencia es la capacidad de poder heredar características de un padre a un hijo, esto se da con los lenguajes basados en clases, pero en Javascript que está basado en prototipos, la herencia se da a modo de cadena prototípica. Veamos un ejm.

Ejm

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Herencia prototípica</title>
  </head>

  <body>
    <h1>Herencia prototípica</h1>

    <script>
      function Persona(nombre, edad) {
        this.nombre = nombre;
        this.edad = edad;
      }

      Persona.prototype.hablar = function () {
        console.log("Soy una persona y estoy hablando");
      };

      // Herencia prototípica
      function Hombre(nombre, edad, apellidos) {
        this.super = Persona;
        this.super(nombre, edad);
        this.apellidos = apellidos;
      }

      // Hombre está heredando de Persona
      // Muy importantes estas dos lineas de código siguientes
      Hombre.prototype = new Persona();
      Hombre.prototype.constructor = Hombre;

      // Sobreescritura de método del prototipo padre en el hijo
      Hombre.prototype.hablar = function () {
        console.log("Soy un hombre y estoy hablando");
      };

      // Nueva función no incluída en la función prototípica padre
      Hombre.prototype.saludar = function () {
        console.log("Soy un hombre y estoy saludando");
      };

      const francisco = new Hombre("Francisco", 51, "Paredes");
      console.log(francisco);
      francisco.hablar();
      francisco.saludar();
    </script>
  </body>
</html>

Desde el año 2015 vamos a poder hacer lo mismo en Javascript que en otros lenguajes de programación con las clases. Javascript, durante toda su existencia y en futuro próximo, seguirá trabajando la parte de la POO basada en prototipos.

Si resulta confuso este tema de como crear prototipos y la herencia prototípica, no hay que preocuparse ya que en los próximos capítulos trabajaremos con clases, las cuales, tras bambalinas realizarán el cambio a prototipos sin que nosotros tengamos que crear las funciones prototípicas.

Scroll al inicio