Foros del Web » Programando para Internet » Javascript »

JavaScript orientado a objetos

Estas en el tema de JavaScript orientado a objetos en el foro de Javascript en Foros del Web. Hola a todos, soy nuevo en el tema y en particular no le daba mucha importancia a este lenguaje llamado JavaScript, solo usaba aplicaciones básicas ...
  #1 (permalink)  
Antiguo 07/11/2006, 20:00
Avatar de capa  
Fecha de Ingreso: octubre-2006
Mensajes: 86
Antigüedad: 17 años, 6 meses
Puntos: 1
JavaScript orientado a objetos

Hola a todos, soy nuevo en el tema y en particular no le daba mucha importancia a este lenguaje llamado JavaScript, solo usaba aplicaciones básicas y en ocasiones ya hechas, pero hace meses atrás me propuse redesarrollar aplicaciones usando tecnología AJAX y definitivamente me resulto indispensable este lenguaje JavaScript para ello tenia que dale lectura sobre el lenguaje y visitar este foro con frecuencia y donde no encontré mucha información sobre JavaScript Orientado a Objetos.

Me gustaría que le creara un espació de ayuda (help’s) sobre Clases y Objetos en JavaScript, veo que hay usuarios dotados en el tema donde puedan aportar y compartir.

pero tengo una duda si JavaScript es orientado a objetos o no? en su gran parte vi que no lo consideran como un leguaje orientado a objetos? cuales serian las deficiencias en desarrollar con clases.

bueno, tengo la siguiente inquietud respecto al tema, que diferencia tengo:
Código HTML:
// aqui podre usar mas argumetos ??
function datos(){
 this.valor = 10;
 this.opera = function (){
  return (this.valor * 2);
 }
}

//en esta no…?
var datos = { 
 valor : 10 ,
 opera : function (){
  return (this.valor * 2);
 }
}
//ambos son clases.. verdad..??
Por favor cual es la forma correcta para usar y sus bondades…

Saludos.
  #2 (permalink)  
Antiguo 07/11/2006, 21:20
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
digamos que JavaScript esta evolucionando poco a poco, y al igual que tu este lenguaje yo no lo consideraba la gran cosa, pero apartir de que AJAX fue introducido al mercado, es que le he tomado ams respeto a este.

bueno, JavaScript puedes hacer hacer Herencia simple, sobreescritura de metodos y algunas cosas mas

en cuanto a tu pregunta, si, las dos son clases y las dos formas son correctas, un tip que te puedo dar es que nombres las clases con la primera letra en Mayuscula eso no es ley, pero digamos que es una regla no escrita entre desarrolladores

bueno, ya me tengo que ir.... me estan sacando de aqui pero mañana te pongo unos ejemplos de herencia y sobreescritura de metodos

have funnnnnnnnnnnn
  #3 (permalink)  
Antiguo 08/11/2006, 00:13
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
Yo los objetos en javaScript los creo de forma poco común (no me gusta pero nada la forma de declaración más corriente ésta funciona también perfectemente en todos los navegadores:

Código:
MiClase.js
======

// Propiedades
MiClase.prototype.nombrePropiedad1 = null;
MiClase.prototype.nombrePropiedad2 = null;
MiClase.prototype.nombrePropiedad3 = null;


//---------------------------------------------------------


// Métodos:
MiClase.prototype.setNombre = function(nombre)
{
this.nombrePropiedad3 = nombre;
}

MiClase.prototype.getNombre = function()
{
return this.nombrePropiedad3;
}


//---------------------------------------------------------


// Constructor
function MiClase(valorPropiedad1, valorPropiedad2)
{
this.nombrePropiedad1 = valorPropiedad1;
this.nombrePropiedad2 = valorPropiedad2;
}
Recuerdo que un compañero me comentó hace tiempo que los navegadores soportan la versión 1 de javaScript, pero que desde hace unos años existe la versión 2 que no la soporta ningún navegador actualmente, y que incorpora muchas características de verdadera OOPs tales como herencia y demás.

Personalmente las cosas que no me gustan de javaScript:

* No se pueden pasar objetos por referencia sino por copia
* Que no sea compilado, con lo que ello implica respecto a la seguridad... por no decir que en algunos scripts si convertimos un array de objetos a JS el navegador peta... y el IE se lleva la palma.
* Las cosas que no funcionan igual en todos los navegadores (como el ODIOSO IE que va siempre en libre, como ahora con el CSS2 que tampocó seguirá el estándar). Aunque tampoco me gusta que si en Firefox no pones un punto y coma te la deje pasar...

Stock puedes explicar lo de hacer "herencia simple" por favor... se puede heredar en javaScript 1?

Última edición por MikiBroki; 08/11/2006 a las 02:53
  #4 (permalink)  
Antiguo 08/11/2006, 03:03
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Otra forma de crear objetos es a partir del objeto "object", y los atributos y los métodos pueden añadirse sin estar definidos:

Código:
<script>
var aa = new Object();
aa.atributo = "un atributo";
aa["metodo"] = function(x) {alert(x)};
aa.metodo(aa.atributo);
</script>
Con el sistema de las cadenas entrecomilladas se pueden crear atributos y métodos incluso introducidos por teclado.

La verdad es que poco se habla de la programación orientada a objetos en javascript, pero se usa constantemente... cuando usamos getElementById para referenciar a un objeto, simplemente estamos usando el método de ese nombre del objeto document (o del tag que nos sirve de referencia) que a la vez es dependiente del objeto window...
Con el DOM (que siempre ha existido) tenemos un control absoluto de todos los elementos de una página.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 08/11/2006, 10:42
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
Aqui te pongo un ejemplo que hice para demostrar la herencia simple y sobreescritura de metodos

te daras cuenta que hice los Get's/Set's de los atributos de la clase, esto no es encesario, pues en JS no existe la visibilidad, pero bueno, son solo buenas costumbres que me ha dejado JAVA

Código PHP:
//superclase
function Persona(){
    
this.nombre;
    
this.edad;
    
this.sexo;
    
    
this.setNombre = function(nombre){
        
this.nombre nombre;
    }
    
    
this.setEdad = function(edad){
        
this.edad edad;
    }

    
this.setSexo = function(sexo){
        
this.sexo sexo;
    }
    
    
this.hablar = function(algo){
        
alert("Hablando: "+algo);
    }
}
//clases que extienden de Persona
function Mexicano(){
    
this.idioma "Español";
}

function 
Chino(){
    
this.color "amarilla";
}

//haciendo la herencia
Mexicano.prototype = new Persona();
Chino.prototype = new Persona();

//sobrescritura de metodos
Mexicano.prototype.hablar = function(algo){
    
alert(this.nombre+" dice: "+algo);
}

//creando instancias
var mexicano = new Mexicano();
mexicano.setNombre("Crysfel");
mexicano.setEdad(22);
mexicano.setSexo("Masculino");
mexicano.hablar("Hola! me llamo "+mexicano.nombre+" y tengo "+mexicano.edad+" años");
mexicano.hablar("Viva Mexico!");

var 
chino = new Chino();
chino.hablar("hola, yo soy un chino! de piel "+chino.color); 
have funnnnnnnn
  #6 (permalink)  
Antiguo 08/11/2006, 10:52
Avatar de capa  
Fecha de Ingreso: octubre-2006
Mensajes: 86
Antigüedad: 17 años, 6 meses
Puntos: 1
Bien, Hola stock gracias por el consejo, tomara en cuenta de ahora en adelante, hay mis Clases parecen simples funciones si es verdad abra que hacer diferencia, bueno espero tus aportes sobre el tema,

MikiBroki, me da mucha importancia el uso de la propiedad Prototype, y me gustaría saber cual es comportamiento de de esta propiedad, veo que el ejemplo que ilustras trabaja perfectamente, ya voy deduciendo POO en JS

Si, tienes razón JavaScript disgusta, y tiene que ver mucho con los navegadores y basadote en los estándares, pero ami se me hizo una necesidad para trabajar.

Hola caricatos, interesante el ejemplo, se me vienen las ideas, pero con lo que mencionas me haces pensar, es verdad bajo window tenemos una serie de elementos, y en Form este es el objeto <imput tipe=’’ name=’’ value=’’> ,
ammm me dare tiempo para disgregar…

Última edición por capa; 08/11/2006 a las 15:00
  #7 (permalink)  
Antiguo 08/11/2006, 10:54
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
Cita:
Iniciado por MikiBroki Ver Mensaje
...Personalmente las cosas que no me gustan de javaScript:

* No se pueden pasar objetos por referencia sino por copia
* Que no sea compilado, con lo que ello implica respecto a la seguridad... por no decir que en algunos scripts si convertimos un array de objetos a JS el navegador peta... y el IE se lleva la palma.
* Las cosas que no funcionan igual en todos los navegadores (como el ODIOSO IE que va siempre en libre, como ahora con el CSS2 que tampocó seguirá el estándar). Aunque tampoco me gusta que si en Firefox no pones un punto y coma te la deje pasar...
jejejjejejejje


Don't hate the languaje, hate the runtime environment

esa frase la adopte cuando comense aprendiendo JSON jejejejejejeje

have funnnnnnn
  #8 (permalink)  
Antiguo 08/11/2006, 12:33
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
Genial Stock, muy interesante lo de la herencia... este post para mis Favoritos :)... y sobre lo del "runtime enviroment" también, excepto en lo del paso por referencia y a lo de ser compilado, ya que el visitante de la web no tiene por qué saber nada sobre el código de la WEB que visita, esto pienso que debería haber estado definido en el estándar, no sé...

Capa, un par de enlaces que hablan de prototype:

http://es.wikipedia.org/wiki/JavaScript
http://javis.wordpress.com/2006/10/2...ado-a-objetos/

Realmente programar orientado a OOP no tiene color comparado con la forma tradicionar, con miles de funciones sueltas. Mi vida cambió desde que programa orientado a objetos con JavaScript :d:d:

Última edición por MikiBroki; 08/11/2006 a las 12:50
  #9 (permalink)  
Antiguo 08/11/2006, 16:29
Avatar de capa  
Fecha de Ingreso: octubre-2006
Mensajes: 86
Antigüedad: 17 años, 6 meses
Puntos: 1
De acuerdo

MikiBroki, gracias por los links, en prioridad el segundo me parece un buen enlace donde me quedo claro el uso de la propiedad de Prototype y entender mejor el ejemplo de stock que es muy ilustrativo e interesante.

stock gracias, excelente el ejemplo, me quedo bien claro con respecto a las herencias.
  #10 (permalink)  
Antiguo 08/11/2006, 16:53
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Cita:
Iniciado por capa Ver Mensaje
Hola caricatos, interesante el ejemplo, se me vienen las ideas, pero con lo que mencionas me haces pensar, es verdad bajo window tenemos una serie de elementos, y en Form este es el objeto <imput tipe=’’ name=’’ value=’’> ,
ammm me dare tiempo para disgregar…
Un input depende de un formulario, que es parte de la colección (array) de formularios que dependen del objeto document que a la vez depende del objeto window...

window.document.forms["el_form"].elements["el_input"].value;

Lo que puse entre corchetes son elementos de un array (lo que le precede) que puede recorrerse tanto por el índice como también asociativamente (por el atributo name) Todos los elementos que hay entre puntos son objetos... y esa lista termina en un atributo.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #11 (permalink)  
Antiguo 22/11/2006, 09:37
 
Fecha de Ingreso: octubre-2003
Mensajes: 96
Antigüedad: 20 años, 6 meses
Puntos: 0
acabo de agregar al blog la segunda parte de la explicación, que veo q les gustó ;)

esta vez, sobre herencia en javascript:
http://javis.wordpress.com/2006/11/2...en-javascript/
  #12 (permalink)  
Antiguo 22/11/2006, 09:39
 
Fecha de Ingreso: octubre-2003
Mensajes: 96
Antigüedad: 20 años, 6 meses
Puntos: 0
acabo de agregar al blog la segunda parte de la explicación, que veo q les gustó ;)

esta vez, sobre herencia en javascript:
http://javis.wordpress.com/2006/11/2...en-javascript/
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:54.