jDeveloper (o Jota) me pasó hace unos días una implementación para conseguir Orientar a Clases nuestros scripts. Me ha encantado por su sencillez y versatilida, nos permite generar Clases con sus respectivos Objetos, extendiendo de Super Clases.
var Class = function(current,previous){
// Comprobamos si tenemos una Class que extender.
previous = typeof previous == 'undefined' ? {} : previous.prototype;
// Extendemos con las propiedades de la Class anterior
for(p in previous){
// Si no existe la propiedad la añadimos
if(typeof current[p] == 'undefined') current[p] = previous[p];
// Si es una función
else if(typeof previous[p] == 'function'){
// añadimos this.parent() a la función de la Class actual.
current[p] = (function(tmp){
var _parent = function(){
this.parent = _parent.parent;
return tmp.apply(this, arguments);
}
return _parent;
})(current[p]);
// Igualamos this.parent() al método de la Class anterior.
current[p].parent = previous[p];
}
}
// Construimos el contenedor
var construct = function(){
if(this.init) this.init.apply(this,arguments);
}
// Le aplicamos los métodos extendidos
construct.prototype = current;
// asignamos un constructor
construct.constructor = Class;
//Devolvemos el constructor.
return construct;
}
Si quitamos todos los comentarios, nos queda un script de 21 líneas que podemos integrar en cualquier código ya que no depende de ningún framework JS.
¿Como lo uso?
Con este script podemos generar Clases, pero ¿como?
var Humano = new Class({
piernas: 2,
brazos: 2,
cabeza: 1,
init: function(name){
this.name = name;
},
saludar: function(){
return "Hola, soy " + this.name;
}
});
Creamos la Clase Humano
que especifica tiene 2 piernas, 2 brazos y una cabeza, además especificamos que el constructor nos solicita un nombre que se le asignará al «Humano
«. Como método para testear que funciona he creado saludar()
que nos devolverá un saludo cordial personalizado para cada «Humano
«.
var Programador = new Class({
experiencia: 0,
init: function(name, lenguaje){
this.parent(name);
this.lenguaje = lenguaje;
},
saludar: function(){
return this.parent() + " y programo en " + this.lenguaje;
},
programar: function(){
this.experiencia++;
return "Estoy programando";
}
},Humano);
La clase Programador
extiende de la clase Humano
y además le añade experiencia como un valor único de los Programadores. Sobreescribimos los métodos init()
y saludar()
pero hacemos referencia a los del padre (Class Humano
) mediante el uso de this.parent()
. Además he añadido un método propio del Programador
que obviamente es «programar()
» 😀
var Andres = new Programador("Andres", "Javascript");
Andres.saludar();
// --> "Hola, soy Andres y programo en Javascript"
De esta forma creamos un nuevo Objeto llamado Andres
y que dispondrá de todos los métodos de Humano
y Programador
. Incluso podemos hacerlo currar mucho 😀
var horas = 24;
while(horas > 0) {
console.log(Andres.programar());
horas--;
}
Optimizaciones en los comentarios.
32 comentarios, 1 referencias
+
#