Quizá uno de los grandes problemas desde siempre de javascript es que al ser un lenguaje tan flexible, le pasa un poco lo que le pasa a PHP, que el control y el orden de la aplicación se lo pasan al usuario, por lo que muchas veces se genera código de baja calidad pero que es funcional.
La forma lógica de realizar herencia en javascript es mediante una "Herencia de prototipo". Cuando creamos un nuevo objeto, éste automáticamente recibe una propiedad que se denomina "prototype". Ésta propiedad es un objeto al que le podemos agregar otras propiedades que serán accesibles desde cualquier instancia del objeto que la contiene. Esto lo explicaremos con un ejemplo;
//Creamos un objeto Persona.
function Persona () {
this.ojos = 2;
this.piernas = 2;
this.manos = 2;
}
Persona.prototype.getManos = function(){
return " Esta persona tiene "+this.manos+" manos";
}
//Ahora creamos una instancia de persona.
var objPersona = new Persona();
console.log(objPersona.getManos()); // "Esta persona tiene 2 manos"
En el ejemplo anterior hemos creado una instancia de la clase Persona y le hemos añadido al "prototype" la función getManos(), por lo que cada vez que instanciemos una objeto de la clase Persona estará accesible getManos().
Lo siguiente que haremos será crear una clase Boxeador que herede directamente de Persona, y que recibirá como parámetro el peso y la altura.
//Aquí creamos la clase boxeador
function Boxeador (altura, peso) {
this.peso = new String(peso);
this.altura = new String(altura);
}
Boxeador.prototype = new Persona(); //Aquí le decimos de dónde hereda.
//Aquí creamos una instancia de la clase boxeador.
var objBoxeador = new Boxeador("1.80","76");
console.log(objBoxeador.getManos()); // "Esta persona tiene 2 manos"
Aquí podemos ver cómo la instancia objBoxeador acaba de heredar de la clase persona la función getManos() por lo que ahora cualquier instancia de la clase Boxeador tendrá acceso a las propiedades de la clase Persona.
//Aquí falta incluír el ejemplo total.

