Código
Class("Fotografia", {
has: {
alto: {is: "ro"},
ancho: {is: "rw"},
},
methods: {
clear: function () {
this.alto = 0;
this.setAncho(0);
}
}
})
Class("Selfie", {
isa: Fotografia,
has: {
etiqueta: {init: "yo"}
},
after: {
clear: function () {
this.etiqueta = "yo";
}
}
})
var foto= new Selfie({ancho: 360, alto:240});
foto.etiqueta= "Ricky Martin";
Explicación
Este es un ejemplo de Joose para crear una clase que hereda de otra. La función Class() toma dos parámetros: el nombre de la clase y la definición de la clase pasada como un objeto literal. La sintaxis para definir la clases es declarativa y fácil de leer. Las palabras clave como "has", "methods", "isa" y "after" son usadas para expresar diferentes aspectos de la clase.
Atributos
has: {
alto: {is: "ro"},
ancho: {is: "rw"},
},
El primer elemento de la declaración de la clase Fotografía es un bloque "has" que define dos atributos de la clase: alto y ancho. El bloque alto: {is: "ro"} define "alto" como de sólo lectura. Mientras que el bloque ancho: {is: "rw"} define "ancho" como un atributo de lectura y escritura. Joose automáticamente crea los métodos getAlto() para "alto" y getAncho() y setAncho() para "ancho". El nombre de estos métodos sigue la convención camelCase, colocando la primera letra del atributo en mayúscula.
has: {
etiqueta: {init: "yo"}
},
El bloque etiqueta: {init: "yo"} define el atributo "etiqueta" con un valor por default que es el string "yo". Como no se especifica si es rw o ro, por defecto no se crean los métodos de acceso getEtiqueta() y setEtiqueta().
Métodos
methods: {
clear: function () {
this.alto = 0;
this.setAncho(0);
}
El bloque "methods" define el método clear() para la clase Fotografía. Podemos poner todos los métodos que queramos. En este caso la función setea "alto" accediendo a la variable directamente, pero modifica "ancho" usando su método modificador creado con la declaración "rw".
Herencia
isa: Fotografia,
La cláusula "isa" en la definición de Selfie define que su super clase es Fotografía. Selfie hereda los métodos y atributos de su superclase.
Modificador de método
after: {
clear: function () {
this.etiqueta = "yo";
}
}
Joose soporta los llamados modificadores de métodos. Uno de los 5 modificadores que declaran métodos con un comportamiento especial es "after". Aquí define que acciones ejecutar después de llamar al método con el mismo nombre definido en su superclase.
Inicialización
var foto= new Selfie({ancho: 360, alto:240});
El objeto literal {ancho: 360, alto:240} es pasado como argumento de un método especial llamada initialize() que lo usa para inicializar los valores del atributo del nuevo objeto.
No hay comentarios:
Publicar un comentario