🥇 Herencia, prototipos y constructores.

En Javascript la herencia existe de forma diferente a como existen en lenguajes como Java o PHP, los objetos pueden ser extendidos una ves que se inicializan mediante la funcion prototype.

Un constructor es la función que se utiliza para construir objetos, cada objeto tiene los mismos métodos y las mismas propiedades, aunque estas segundas pueden y suelen tener distintos valores de un objeto a otro. Para crear un nuevo objeto utilizamos la palabra new seguida del tipo de objeto que deseamos crear.

  1. Vamos a crear la clase persona.

    funcion Persona(nombre,apellido,edad){
        this.nombre = nombre;
        this.apellido = apellido;
        this.edad = edad;
    }
    
    var roberto = new Persona("Roberto","Buena",27);
    

    Es importante una clase persona con lo visto en el capitulo anterior… esto var roberto = { /* */ } no es lo mismo que esto var roberto = new Persona(), el primer caso (lo que vimos en el capitulo anterior) haria referencia a un objeto generico de javascript.

    var roberto = new Object();
    roberto.nombre = "Roberto";
    roberto.apellid = "Buena";
    
  2. Todos las personas tienen ciertas habilidades, estas habilidades son habilidades generales, por lo que vamos entonces a complementar un poco nuestra clase Persona de manera que pueda saludar, decir su edad, caminar y dormir.

    function Persona(nombre,apellido,edad) {
        this.nombre = nombre;
        this.apellido = apellido;
        this.edad = edad;
    }
    
    Persona.prototype.Saludar = function() {
        console.log('Hola, mi nombre es ' + this.nombre + ' ' + this.apellido);
    };
    
    Persona.prototype.DecirEdad = function(){
        console.log('Tengo ' + this.edad + ' años');
    }
    
    Persona.prototype.Caminar = function() {
        console.log('Estoy caminando!');
    };
    
    Persona.prototype.Dormir = function() {
        console.log('Me fui a dormir!');
    };
    
    var Roberto = new Persona("Roberto","Buena",27);
    Roberto.Saludar();
    Roberto.DecirEdad();
    Roberto.Caminar();
    Roberto.Dormir();
    

    Cuando queremos hacer referencia a una propiedad de nuestra clase dentro de nuestra clase, hacemos uso de la palabra reservada this, esta se traduce algo asi como este.

Es importante distinguir la diferencia entre var Roberto = Persona() y var Roberto = new Persona(). En Javascript una función tiene la misma apariencia que una clase, por ende cuando no se utiliza new para hacer notar que estamos queriendo crear una nueva instancia de la clase Persona, lo que sucede es que se invoca la función Persona.

Objetos y literales. Asignación por valor vs referencia.
comments powered by Disqus