🥇 Herencia, prototipos y constructores

🍿 ¿Cómo funciona la herencia en JavaScript?

La herencia en JavaScript 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 función prototype.

🍿 ¿Qué es un constructor?

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.

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… Este código var roberto = { /* */ } no es lo mismo que esto var roberto = new Persona(), el primer caso (lo que vimos en el capitulo anterior) haría referencia a un objeto genérico de javascript.

var roberto = new Object();
roberto.nombre = "Roberto";
roberto.apellid = "Buena";

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 así 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.