Si ha realizado Programación Orientada a Objetos en JavaScript, sabrá que puede crear una clase de la siguiente manera:
Person = function(id, name, age){
this.id = id;
this.name = name;
this.age = age;
alert('A new person has been accepted');
}
Hasta ahora nuestra persona de clase solo tiene dos propiedades y le vamos a dar algunos métodos. Una forma limpia de hacer esto es usar su objeto 'prototipo'. A partir de JavaScript 1.1, el objeto prototipo se introdujo en JavaScript. Este es un objeto integrado que simplifica el proceso de agregar propiedades y métodos personalizados a todas las instancias de un objeto. Agreguemos 2 métodos a nuestra clase usando su objeto 'prototipo' de la siguiente manera:
Person.prototype = {
wake_up: function() {
alert('I am awake');
},
get_age: function() {
return this.age;
}
}
Ahora hemos definido nuestra clase Person. ¿Y si quisiéramos definir otra clase llamada Manager que hereda algunas propiedades de Person? No tiene sentido volver a definir todas estas propiedades cuando definamos nuestra clase Manager, podemos configurarla para que herede de la clase Person. JavaScript no tiene herencia incorporada, pero podemos usar una técnica para implementar la herencia de la siguiente manera:
Inheritance_Manager = {};
// Creamos una clase de administrador de herencia (el nombre es arbitrario)
Ahora démosle a nuestra clase de herencia un método llamado extender que toma los argumentos baseClass y subClassas. Dentro del método extend, crearemos una clase interna llamada función de herencia herencia () {}. La razón por la que usamos esta clase interna es para evitar confusiones entre los prototipos baseClass y subClass. A continuación, hacemos que el prototipo de nuestra clase de herencia apunte al prototipo baseClass como con el siguiente código: heritage.prototype = baseClass. prototipo; Luego copiamos el prototipo de herencia en el prototipo de subclase de la siguiente manera: subClass.prototype = nueva herencia (); Lo siguiente es especificar el constructor para nuestra subclase de la siguiente manera: subClass.prototype.constructor = subClass; Una vez que terminamos con la creación de prototipos de subclase, podemos especificar las siguientes dos líneas de código para establecer algunos punteros de clase base.
subClass.baseConstructor = baseClass;
subClass.superClass = baseClass.prototype;
Aquí está el código completo para nuestra función de extensión:
Inheritance_Manager.extend = function(subClass, baseClass) {
function inheritance() { }
inheritance.prototype = baseClass.prototype;
subClass.prototype = new inheritance();
subClass.prototype.constructor = subClass;
subClass.baseConstructor = baseClass;
subClass.superClass = baseClass.prototype;
}
Ahora que hemos implementado nuestra herencia, podemos comenzar a usarla para extender nuestras clases. En este caso, vamos a extender nuestra clase Person a una clase Manager de la siguiente manera:
Definimos la clase Manager
Manager = function(id, name, age, salary) {
Person.baseConstructor.call(this, id, name, age);
this.salary = salary;
alert('A manager has been registered.');
}
lo hacemos heredar de la persona
Inheritance_Manager.extend(Manager, Person);
Si se dio cuenta, acabamos de llamar al método extend de nuestra clase Inheritance_Manager y pasamos la subClass Manager en nuestro caso y luego la baseClass Person. Tenga en cuenta que el orden es muy importante aquí. Si los intercambia, la herencia no funcionará como pretendía. También tenga en cuenta que deberá especificar esta herencia antes de poder definir nuestra subclase. Ahora definamos nuestra subclase:
Podemos agregar más métodos como el siguiente. Nuestra clase Manager siempre tendrá los métodos y propiedades definidos en la clase Person porque hereda de ella.
Manager.prototype.lead = function(){
alert('I am a good leader');
}
Ahora para probarlo, creemos dos objetos, uno de la clase Person y otro de la clase heredada Manager:
var p = new Person(1, 'Joe Tester', 26);
var pm = new Manager(1, 'Joe Tester', 26, '20.000');
No dude en obtener el código completo y más comentarios en:
http://www.cyberminds.co.uk/blog/articles/how-to-implement-javascript-inheritance.aspx