2011/05/04

Optimización de javascript (X). OOP con javascript

Como no hay 2 sin 3, no pueden haber 9 sin 10... vamos a por la décima entrega de optimización de javascript.

Hoy, más que hablar de optimización, vamos a ver algo sobre orientación a objetos, que uno de los mejores inventos desde la cocacola.

El primer paso para la orientación a objetos, es saber cómo se crea un objeto de tipo Object en javascript.

El objeto más simple es el mapa (y no el de Dora la exploradora) o matriz asociativa dispersa que se define entre llaves (recuerdo que los corchetes es la notación simple para definir arrays) y que se indexa por cadenas.

Para definir propiedades del objeto, se puede hacer al definirlo (la clave es una cadena de texto pero no es obligatorio escribirla como cadena entre comillas) o a posteriori como si fuera un Array.
var obj      = {};               // Objeto vacío
var obj      = {'clave': valor}; // Objeto con propiedad
obj['clave'] = valor;            // Propiedad en tiempo de ejecución
El valor almacenado para una propiedad puede ser cualquier cosa, es decir, cualquier objeto de javascript, incluidos otros objetos.

Así se definen objetos, pero las funciones también son objetos y cuando se busca la orientación a objetos con javascript, son los que se usan para definir las clases.

Una clase sencilla definida con una función puede ser el siguiente
var Coordenada = function (x, y) { 
    this.x = x; 
    this.y = y; 
}; 
Los miembros de la clase se definen de dos maneras, o desde dentro de la definición de la clase, o desde fuera.

Si es desde dentro, se hace con la palabra reservada this
this.x = x;
Si es desde fuera, hay que hacer referencia al prototipo de la función clase
Coordenada.prototype.propiedad = valor;
Todas las variables/funciones definidas dentro dentro de nuestra función clase que no se definan mediante this, serán miembros privados de la clase mientras que todas las que se hagan con this (o accediento al prototype) serán miembros públicos.
var Coordenada = function (x, y) { 
    this.x = x;  // Miembro público
    this.y = y;  // Miembro público
    var c = 123; // Miembro privado
};
Para instanciar la clase, no hay más que usar la palabra reservada new
var c = new Coordenada(x, y);
Creo que es importante recordar algo de notación básica de objetos (heredada de Java) para diferenciar clases de objetos.
  • Las clases comienzan por mayúscula
  • Los objetos empiezan por minúscula
Aparte, de regalo, recomiendo usar una notación coherente luego para nombrar clases y objetos. Si te gusta usar '_' entre "palabras", usar siempre '_'. Si te gusta usar combinaciones mayúsculas/minúsculas, usarlas siempre.

No hay comentarios:

Publicar un comentario