Zootropo

Diario del mundo geek.

sábado, julio 24, 2004

Javascript: Objetos

Un objeto agrupa variables referidas a ese objeto, llamadas propiedades y funciones (las funciones las veremos después, si no sabes que es una función olvidalo por ahora) asociadas al objeto y que manipulan sus variables, llamadas métodos. Por ejemplo un objeto coche podría tener como propiedades su marca, el número de puertas, el tipo de carburante,... y como métodos arrancar, parar,...

En lenguajes de programación mas orientados a objetos, como Java, además de los objetos tenemos lo que se llaman clases que definen que propiedades y métodos tienen los objetos de esa clase y apartir de las cuales instanciamos los objetos. Un ejemplo sería una clase coche; en la vida real hay un conjunto de objetos a los que llamamos coches y que tienen un conjunto de propiedades comunes, esto es lo que se llamaría la clase. Sin embargo, mi coche no es igual que el coche de mi vecino, pertenecen a la misma clase (ambos tienen propiedades como la marca, el número de caballos,... y métodos comunes como arrancar, parar,...) pero son objetos distintos. En Javascript como hemos dicho, no existen las clases (aunque en algunos sitios se les llama de forma incorrecta clases al tipo del objeto, lo cual puede ser confuso), de forma que al crear un objeto no se está instanciando una clase, como ocurre en Java. Al crear objetos en Javascript, no tenemos un molde del que sacar los objetos, que sería la clase.

Para crear un objeto en Javascript se puede utilizar una función que se encargue de inicializar las variables y esa clase de cosas, a la que se llama constructor. El nombre de esta función será el que se le dé al tipo de objeto resultante:

/*creamos objetos utilizando el operador new que llama al constructor*/
var miPc = new PC();
/*el constructor es una función como cualquier otra y puede tener argumentos*/
var miCPU = new CPU("AMD","Athlon",1400);

Otra forma de crear un objeto, menos intuitiva para programadores Java son los inicializadores, que es parecido a definir una función constructor pero en la que solo se va a asignar valores a variables y nada mas. La sintaxis es la siguiente:

nombreObjeto = {propiedad1:valor1, propiedad2:valor2, ..., propiedadN:valorN};

Además los inicializadores se pueden anidar, creando objetos como propiedades de otros objetos:

pc = {cpu:{fabricante:"AMD", modelo:"Athlon", velocidad:1400}, memoria:512, MB:Asus 7532"};

Una vez creado el objeto para acceder a las propiedades o los métodos de un objeto se utiliza el operador punto (.), y usamos el mismo procedimiento al asignar un valor a estos. Dado que Javascript declara directamente las nuevas variables al asignarlas un valor si estas no estaban antes declaradas nos basta dar un valor a una variable de un objeto para definir una nueva propiedad del objeto (para definir un nuevo método también basta hacer algo del tipo objeto.nombreMetodo = nombreFuncion;). Además conviene hacer notar que dado que los objetos también son datos, pueden definirse como propiedades de otro objeto. Veamos un ejemplo de todo esto.

/*Accedemos a la propiedad fabricante de mi objeto fabricante, que habremos asociado previamente con el valor que nos pasaron como parámetro al crear el objeto en nuestro constructor. Ahora fab contiene la cadena "AMD"*/
var fab = miCPU.fabricante;
/*También podemos cambiar el valor de una propiedad de la misma forma*/
miCPU.fabricante = "Intel";
/*o definir nuevas propiedades*/
miCPU.precio = 120;
/*y como ya hemos mencionado, establecer un objeto como propiedad de otro objeto*/
miPC.cpu = miCPU;
/*para acceder a una propiedad de un objeto que sea a su vez propiedad de otro objeto utilizamos también el operador punto*/
var precio = miPC.miCPU.precio;