Javascript Orientado a Objetos segun Buzu -El constructor de objetos

Otra entrega de esta serie. Primero pido disculpas por haber tardado tanto en publicar este articulo. Estuve un poco ocupado los días anteriores.

Esta ocasión hablaré sobre como crear objetos. Prometo que de ahora en adelante estaremos escribiendo más código que en entregas anteriores.

Primero que nada hay que saber que hay básicamente dos formas de crear objetos en javascript. La primera es usando el constructor de objetos y la segunda es usando Javascript Literal Notation (JLN). Para muchos no hay realmente diferencia entre si usas JLN o el constructor de objetos. Sin embargo, la realidad es que hay mucha diferencia.

Para lograr entender la diferencia, primero necesitas saber que la programación orientada a objetos en javascript no está basada en clases como en muchos otros lenguajes, sino en prototipos. Un prototipo es una plantilla a partir de la cual se crean los objetos. Estos pueden ser extendidos y asociados a más de un objeto logrando simular el concepto de la herencia de los lenguajes basados en clases.

La importancia de los prototipos es que estos no se copian cada vez que se crea una nueva instancia de determinado objeto (hace tiempo participé en una interesante charla en la que se discutía si en realidad existen las instancias en js o no. Les recomiendo la lean), mas bien, estos son parte del objeto base y pueden ser accedidos por sus instancias.

Veamos un ejemplo de construcción de un objeto usando el constructor de objetos.


var Buzu = function(nombre){
     this.nombre = nombre;
}

Buzu.prototype.saludar = function(saludo){
     alert(saludo);
}

Como puedes ver, ahí estoy usando el constructor de objetos para crear un objeto base llamado Buzu. -Es costumbre iniciar los nombre de los objetos con mayúsculas-. Este objeto ya “viene” con un prototipo, es algo así como el motor del objeto, o para los más románticos, el corazón del objeto. Este prototipo puede ser modificado y eso es precisamente lo que saludar está haciendo.

Al agregar la función saludar, lo que en realidad estamos haciendo es agregar una método al prototipo de Buzu.

Ahora que ya tenemos nuestro objeto base, podemos crear instancias fácilmente de la siguiente manera:


var ImBuzu = new Buzu('Buzu');
ImBuzu.saludar('Amor, paz, respeto y libertad -Revolución');

Ahí estamos creando una instancia de Buzu. En otras palabras, ImBuzu es un objeto basado en Buzu, por lo que tiene todas su propiedades y métodos, así como los de su prototipo. Está es una de las formas más recomendables de crear objetos.

En el siguiente articulo hablaré de JLN y sus ventajas y desventajas frente al uso del constructor de objetos que hemos tratado en esté articulo.