Una de las cosas que siempre he echado de menos en Javascript es tener un buen sistema de clases donde se puedan implementar aplicaciones haciendo uso de patrones orientados a objetos. En ES6 han agregado el soporte para clases aunque bastante limitado para mi gusto siendo una lástima no haber aprovechado la nueva especificación para crear un lenguaje orientado a objetos mucho más robusto.
Si eres como yo que huye de los transpiladores hasta que ES6 esté bien soportado hay un paquete para node que permite tener un sistema bastante simple de clases con herencia.
Este paquete ha sido creado por los desarrolladores de EmberJS y tiene un funcionamiento bastante similar al sistema base.js creado por Dean Edwards por allá por 2006 y más parecido aún al de John Resig.
Instalación
Para instalarlo basta con hacer:
- $ npm install core-object
Uso
Para crear clases usando este sistema tenemos el método estático CoreObject.extend que nos permite definir las clases mediante un objeto que se le pasa como parámetro. Al definir lo métodos podremos hacer uso de this._super(...) para acceder a los métodos de la clase padre.
- var CoreObject = require('core-object');
- // Clase base para personas
- var Person = CoreObject.extend(
- {
- name : '',
- init : function (name)
- {
- if (name)
- {
- this.name = name;
- }
- this._super();
- console.log('Person::init');
- },
- toString : function ()
- {
- console.log(this.name);
- }
- }
- );
- // Clase para jefes que, según parece, son personas
- var Boss = Person.extend(
- {
- name : 'The Boss',
- init : function (name)
- {
- this._super(name);
- console.log('Boss::init');
- }
- }
- );
- //-
- var boss = new Boss();
- boss.toString();
- //-
- var superboss = new Boss('Super Boss');
- superboss.toString();
La salida del código anterior sería la siguiente:
- Person::init
- Boss::init
- The Boss
- Person::init
- Boss::init
- Super Boss