- isa: Indica de qué clase hereda, o sea, su superclase
- does: Aplica roles a la clase
- has: Crea atributos para la clase
- methods: Crea los métodos de instancia
- classMethods: Crea los métodos de clase
isa
Class("Avion", {
isa: Transporte
})
En el ejemplo Avion heredará todos los métodos de la clase Transporte. No hay Herencia Múltiple.
does
Class("Pintura", {
does: Coloreable
})
Aplica roles, a veces llamado traits (algo similiar a mixins), a la clase. Para aplicar múltiples roles se le pasa un array de roles.
has
Class("Puerta",{
has: {
color: {
is: "rw",
init: "blanca"
},
material: {
is: "ro",
init: "madera"
}
}
}
En el ejemplo la clase Puerta tiene dos atributos: color y material. El atributo "color" es de lectura/escritura y es inicializado a "blanca". El atributo "material" es de sólo lectura y es inicializado a "madera". Joose genera los métodos de acceso a los atributos automáticamente, en este caso se llamarían: getColor(), setColor(), getMaterial(). No hay un método setMaterial() porque fue declarado de sólo lectura.
methods
methods: {
clear: function(){
this.setX(0);
this.setY(0);
},
stringify: function(){
return "" + this.getX() + "," + this.getY()
}
}
En el ejemplo agregamos dos métodos a la clase, los métodos clear() y stringify(). El primero para limpiar los atributos de la clase y el segundo para devolver un string que representa los valores de sus atributos.
classMethods
classMethods: {
makeNew: function(){
return new Punto3D()
}
}
Funciona como "methods" pero para generar métodos de clase en vez de métodos de instancia. Ahora podemos crear un Punto3D llamando a Punto3D.makeNew()
Modificadores de métodos
Los métodos declarados como "before" son llamados antes del método que sobreescriben. El valor de retorno es descartado.
before: {
clear: function(){ alert("Antes: " + this.stringify()) }
}
Los métodos declarados como "after" son llamados después del método que sobreescriben. El valor de retorno es descartado.
after: {
clear: function(){ alert("Después: " + this.stringify()) }
}
Métodos especiales
Los objetos Joose devuelven el string "a ClassName" cuando se llama al método stringify(), siendo ClassName el nombre de la clase a la que pertenece el objeto. Éste método se puede sobreescribir. Algunos engines Js utilizan el método toString(), por eso no se modifica directamente toString(), Joose utiliza stringify().
Existe el método initialize() que Joose automáticamente utiliza para inicializar una instancia como esta: var point = new Point({x:10, y: 10})
Se lo puede sobreescribir para cambiar ese comportamiento. O podría ser útil definir un modificador "after" para el método initialize().
No hay comentarios:
Publicar un comentario