Javascript Orientado a Objetos

13.11.07

Javascript es un lenguaje muy poderoso que puede ser programado orientado a objetos pero tiene una particularidad que en vez de estar basado en clases esta basado en prototipos en donde todos los objetos creados son instancias.

El aprender a programar javascript OOP nos servirá mucho en el entendimiento de los diferentes frameworks en javascript que circundan por la red como mootools, prototypejs, jquery entre otros.

Otra de las ventajas de aprender OOP en Javascript es que hará que nuestra calidad de código sea cada vez mejor a la par que nuestra cantidad de código sea menor.

Creación del Objeto Constructor

Una de las características principales de la OOP es la creación del constructor el método que se ejecuta al instanciar al objeto, podemos crear el constructor de 2 formas la primera con la creación de una función común y corriente, la segunda creando una variable que contenga a la función

//Primera Forma
function empleado(){
}
//Segunda Forma
var empleado=function(){
}

Instanciando el Objeto

Una vez creado el objeto y el método constructor crearemos su instancia respectiva

//Metodo Constructor del Objeto
function empleado(){
}
//Instanciando al Objeto
nemp = new empleado();

Creando Propiedades

Podemos crear diversas propiedades del método y del objeto a través de la palabra reservada “this”

//Constructor
function empleado(nombre,apellidos, edad){
//Propiedades
this.nombre = nombre;
this.apellidos = apellidos;
this.edad = edad;
this.fingreso = Date();
alert("Hola " + this.apellidos + ", " + this.nombre +
" Ingresaste el " + this.fingreso);
}
var nemp = new empleado("Erick","Mendoza Rivera",22);

Añadiendo Métodos

Podemos añadir diversos métodos al objeto de 2 formas la primera creando una propiedad que llame a una función externa la segunda utilizando prototype.

Todo objeto creado en Javascript hereda una propiedad llamada prototype(prototipo) con ella podemos añadir métodos y propiedades al objeto creado. Al instanciar un objeto y llamar a una propiedad o método javascript busca directamente en el objeto si no existe buscara en los prototipos creados en el hasta alcanzar el prototipo raíz.

//PRIMERA FORMA
function empleado(nombre,apellidos,edad){
this.nombre = nombre;
this.apellidos = apellidos;
this.edad =  edad;
this.fingreso = Date();
//Llamando a la función externa "grabar"
this.metodo1 = grabar(this.fingreso);
}
function grabar(fecha){
alert("Grabado el " + fecha);
}
var emp = new empleado();
emp.metodo1;

//SEGUNDA FORMA -> modo1
function empleado(nombre,apellidos,edad){
this.nombre = nombre;
this.apellidos = apellidos;
this.edad =  edad;
this.fingreso = Date();
}
//Creando método con la propiedad prototype
empleado.prototype.metodo1 = function(){
alert("Llamando al Metodo 1");
}
empleado.prototype.metodo2 = function(){
alert("Llamando al Metodo 2");
}
var nemp = new empleado("Erick","Mendoza Rivera",22);
nemp.metodo1();
nemp.metodo2();

//SEGUNDA FORMA -> modo2
function empleado(nombre,apellidos,edad){
this.nombre = nombre;
this.apellidos = apellidos;
this.edad =  edad;
this.fingreso = Date();
}
//Usando una variable auxiliar
var e;
//Vinculando el prototipo del objeto con la variable
e = empleado.prototype;
e.metodo1 = function(){
alert("Llamando al Método 1");
}
e.metodo2 = function(){
alert("Llamando al Método 2");
}
//En lo persona prefiero la segunda forma ademas que
//ahorro código y de estar digitando “prototype” a cada rato

var nemp = new empleado();
nemp.metodo1();
nemp.metodo2();

Herencia

Una característica de la programación orientada a objetos es el de poder heredar métodos y propiedades de otra clase, en javascript podemos generar herencia de otros objetos a través de propiedad prototype.

//Objeto Secundario
function persona(){
this.sexo = "Masculino";
this.profesion = "Desarrollador";
this.anyo = 2007;
}
var p = persona.prototype;
p.mostrarAnyo = function(){
alert(this.anyo);
}

//Objeto Principal
function empleado(nombre,apellidos,edad){
this.nombre = nombre;
this.apellidos = apellidos;
this.edad =  edad;
this.fingreso = Date();
}

//El objeto "empleado hereda los métodos
//y propiedades del objeto "persona"
//la herencia se debe realizar después de creado el constructor
//y antes de volver a utilizar "prototype" para crear los métodos
empleado.prototype = new persona();

var e = empleado.prototype
e.mostrarFecha = function(){
alert(this.fingreso);
}

//Instanciando
var nemp = new empleado("Erick","Mendoza Rivera",22);
alert(nemp.nombre); //Propiedad Nativa
alert(nemp.sexo);  //Propiedad Heredada
nemp.mostrarFecha(); //Método Nativo
nemp.mostrarAnyo(); //Método Heredado

Polimorfismo

Otra de las características del OOP es el polimorfismo, los métodos y propiedades de 2 objetos diferentes pueden tener el mismo nombre pero comportarse de diferente manera según el objeto que se este usando.

//PRIMER OBJETO
function objeto1(){
}
//SEGUNDO OBJETO
function objeto2(){
}
objeto1.prototype.grabar = function(){
alert("Primer Método Grabar");
}
objeto2.prototype.grabar = function(){
alert("Segundo Método Grabar");
}
var obj1=new objeto1();
var obj2=new objeto2();
//Iguales nombres de los métodos nos muestran
//resultados diferentes
obj1.grabar();
obj2.grabar();

Miembros Privados

El principio de ocultación de la OOP podemos realizarlo fácilmente en métodos y propiedades del objeto, el primero creando los métodos en el mismo constructor y el segundo dejando de utilizar la palabra reservada “this” creando variables del propio objeto.

//Constructor
function producto(){
 //propiedad publica
this.marca = "IBM";
//anyo por su parte es una propiedad del objeto privada
// pues solo se puede acceder en el objeto en si
var anyo = 2007;
// Método Publico
this.registrar = function(){
alert("Método Registrar");
}
//Método Privado
function eliminar(){
alert("Método Eliminar");
}
}
var pro = new producto();
alert(pro.marca); //IBM
alert(pro.anyo); //Undefined
pro.registrar(); // Método Registrar
pro.eliminar(); //Error : El Método no Existe

Extensiones de Objetos

Como ya dijimos prototype esta inmerso en todo objeto que se cree por tanto podemos usarlo en objetos del propio javascript para añadir nuevos métodos y propiedades que nos sean útiles.

Ejemplo : El Objeto Date tiene un grupo de métodos que nos devuelve el mes, año, mes, etc podemos usar prototype para que nos desvuelva la fecha actual para eso vamos a añadir al objeto un método llamado fechaActual

//Vinculando el objeto a la variable
var d = Date.prototype;
//Añadiendo el Método
d.fechaActual = function(){
var ames = Array("Enero","Febrero","Marzo","Abril",
"Mayo","Junio","Julio","Agosto",
"Setiembre","Octubre","Noviembre","Diciembre");
var adia = Array("Domingo","Lunes","Martes","Miercoles",
"Jueves","Viernes","Sabado");
var nmes = ames[this.getMonth()];
var ndia = adia[this.getDay()] + " " + this.getDate();
var nyear = this.getFullYear();
var fecha = ndia + " de " + nmes + " de " + nyear;
alert(fecha);
}

//Creando una nueva Fecha
var fecha = new Date();
//Llamando a nuestro método
fecha.fechaActual();

escrito en la(s) Categoria(s) : Javascript

5 Comentarios

  1. Carlos Castañeda

    Simplemente excelente, muy claro, muy practico.

    Muchas gracias por la ayuda.

  2. Pedro Andujar

    Hola.

    He escrito un script que da más soporte OOP, me gustaría conocer tu opinión.

    Puedes verlo en http://www.jsimpleclass.net/.

    Saludos.

  3. Joaquin

    a prueba de tontos, excelente!, practico, simple y conciso

  4. monse :P

    hola..!! :D

    esta muy bn el tutorial…

    Saludos..!!

    i graxias..!!

  5. Supercharly

    Gracias, por fin info clara, concisa y bien explicada con sencillez, no siempre tengo tiempo o ganas de leer un tuto de 100 paginas, a veces necesito datos concretos, abrazo desde Uruguay

Comentar

Ultimos Comentarios

  • Goerge

    en LaCuerda.net : Tablaturas y Acordes en Español

    los felicito por el buen trabajo que estan desempeñando, pero quesie...
  • 2008-05-06 16:54:57
  • Supercharly

    en Javascript Orientado a Objetos

    Gracias, por fin info clara, concisa y bien explicada con sencillez, n...
  • 2008-05-03 23:46:12
  • rammstein

    en Rammstein : Völkerball DVD

    Rammstein es lo mejor del metal, till es un gran vocalista y un buen l...
  • 2008-04-30 13:40:53
  • Sniper

    en Gantz 2nd Phase Catastrofe

    ola alguien me dice donde hay una web en la que puedan estar todos los...
  • 2008-04-28 21:12:40
  • Oscar Ortega

    en GotoAndLearn : Video Tutoriales de Flash

    Hola! He estado revisando Mercado Profresional y otras webs, estoy ...
  • 2008-04-27 12:29:35
  • Deivis

    en Creacion de archivos PDF en PHP con DOMPDF

    Hola a todos, esta muy buena la libreria, lo que no logro es incrustar...
  • 2008-04-21 13:53:30
  • noemi

    en 300 : Una Pelicula que Promete

    me parecio xevere esta k vuela...
  • 2008-04-20 21:14:54
  • jeovanny guzman

    en LaCuerda.net : Tablaturas y Acordes en Español

    De verdad me parece un excelente trabajo! los felicito y les comento q...
  • 2008-04-17 20:19:52
  • Lucho

    en Saw 4: Una Pelicula Incierta

    tan muy buenas todas las de saw en especial la3...
  • 2008-04-17 13:06:06
  • jesus alias mexiko

    en Rammstein : Völkerball DVD

    son chidos rammstein son lo mejor yea...
  • 2008-04-15 16:51:23