Foros del Web » Programando para Internet » Javascript »

Objetos javascript

Estas en el tema de Objetos javascript en el foro de Javascript en Foros del Web. Buenas, Estoy aprendiendo a usar objeto en javascript y me quede un poco estancado en un ejericio.Tengo dos botones uno que crea un gato con ...
  #1 (permalink)  
Antiguo 15/02/2011, 04:44
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 17 años
Puntos: 2
Objetos javascript

Buenas,

Estoy aprendiendo a usar objeto en javascript y me quede un poco estancado en un ejericio.Tengo dos botones uno que crea un gato con el color y la edad y el otro que suma la edad.
EL problema esta en que nose como guardar la edad que sumo en el objeto y si dpsues le das al boton sumar otra ves continue sobre ese numero.

Dejo el ejemplo:

Código Javascript:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2. <html>
  3.     <head>
  4.         <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  5.         <title>Untitled Document</title>
  6. <script type="text/javascript" src="jquery-1.4.2.min.js"></script>
  7.     </head>
  8.     <body>
  9.         <input type="button" value="boton" onclick="crear('michu')">
  10.         <input type="button" value="summar"  id="edad">
  11.         <script type="text/javascript">
  12.            
  13. var Gato = function (color, edad) {
  14.    
  15.     this.color = color;
  16.     this.edad = edad;
  17.     this.mostrar = mostrar;
  18. this.cambiare = cambiare;
  19. }
  20.  
  21. function crear(objeto){
  22.  
  23.     //objeto es el nombre del gato
  24.     var color= "blanco";
  25.     var edad= 10;
  26.  
  27.    
  28.     var objeto = new Gato(color, edad);
  29.     objeto.mostrar(objeto);
  30.     objeto.cambiare(objeto);
  31. }
  32.  
  33. function mostrar(objeto){
  34.     alert(objeto.color);
  35.     alert(objeto.edad);
  36.    
  37. }
  38.  
  39. function cambiare(objeto){
  40.  
  41. $('#edad').click(function() {
  42.  
  43. var edad = objeto.edad;
  44.  
  45.  
  46. var nuevaedad = Number(edad)+ 1;
  47. alert(nuevaedad);
  48.  
  49.  
  50.  
  51.  
  52. });
  53.    
  54. }
  55.  
  56.            
  57.         </script>
  58.     </body>
  59. </html>

El codigo contiene jquery.

Saludos
  #2 (permalink)  
Antiguo 15/02/2011, 10:21
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 17 años, 2 meses
Puntos: 20
Respuesta: Objetos javascript

El problema es que no estas persistiendo el objeto Gato. Estas creando uno nuevo en cada click, y aparte las demas funciones no pueden acceder a ese objeto.
__________________
I see dead pixels
  #3 (permalink)  
Antiguo 15/02/2011, 11:08
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 18 años, 1 mes
Puntos: 122
Respuesta: Objetos javascript

Tu problema es de scope. Declara tu variable objeto afuera de tus funciones, luego en tu función crear, en lugar de hacer

var objeto = new Gato(color, edad);
solo haz
objeto = new Gato(color, edad);

Eso debería solucionar el problema.
__________________
twitter: @imbuzu
  #4 (permalink)  
Antiguo 15/02/2011, 11:29
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 17 años
Puntos: 2
Respuesta: Objetos javascript

Buenas,

no puedo declarar la variable fuera de una funcion ya que al hacer click sobre el boton eso ejecuta la funcion.
Pude logar que se haga la suma un vez creado el objeto gato pero el problema es que cada vez que le da a sumar se repite el numero varias veces.
Ej: si hace un click en sumar aparece
dos veces 1
si hace otro click en summar aparece dos veces 1 y luego dos veces 2 y asi...
porque ocurre esto.

Código Javascript:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2. <html>
  3.     <head>
  4.         <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  5.         <title>Untitled Document</title>
  6. <script type="text/javascript" src="jquery-1.4.2.min.js"></script>
  7.     </head>
  8.     <body>
  9.         <input type="button" value="boton" onclick="crear('michu')">
  10.         <input type="button" value="summar"  id="edad">
  11.         <script type="text/javascript">
  12.            
  13. var Gato = function (color, edad) {
  14.    
  15.     this.color = color;
  16.     this.edad = edad;
  17.     this.mostrar = mostrar;
  18. this.cambiare = cambiare;
  19. }
  20.  
  21. function crear(objeto, nuevaedad){
  22.     if(document.getElementById("textogato")){
  23.     alert(nuevaedad);
  24.     var color = objeto.color;
  25.     var edad = nuevaedad;
  26.     var objeto = new Gato(color, edad);
  27.  
  28.    
  29.     objeto.cambiare(objeto);
  30.    
  31.     }else{
  32.     //objeto es el nombre del gato
  33.     var color= "blanco";
  34.     var edad= 10;
  35.  
  36.    
  37.     objeto = new Gato(color, edad);
  38.     objeto.mostrar(objeto);
  39.     objeto.cambiare(objeto);
  40.     }
  41. }
  42.  
  43. function mostrar(objeto){
  44.    
  45.                 var $p = $('<p>');
  46.                 var id = "textogato";
  47.                 var $objeto = $p.attr("id", id);
  48.                 var $texto = objeto.color;
  49.                 var $objeto = $p.text($texto); 
  50.                 $objeto.css("display", "inline");
  51.                 $objeto.css("background", "red");
  52.                
  53.                 $objeto.css("font-size", "20px");
  54.                 $objeto.css("color", "blue");
  55.                        
  56.                 $objeto.appendTo('body');
  57.  
  58.            
  59.  
  60. }
  61.  
  62. function cambiare(objeto){
  63.  
  64. $('#edad').click(function() {
  65.  
  66. var edad = objeto.edad;
  67.  
  68.  
  69. var nuevaedad = Number(edad)+ 1;
  70. alert(nuevaedad);
  71.  
  72. crear(objeto, nuevaedad);
  73.  
  74.  
  75. });
  76.    
  77. }
  78.  
  79.            
  80.         </script>
  81.     </body>
  82. </html>

Saludos
  #5 (permalink)  
Antiguo 15/02/2011, 16:19
 
Fecha de Ingreso: febrero-2011
Ubicación: Evolandia
Mensajes: 103
Antigüedad: 13 años, 9 meses
Puntos: 10
Respuesta: Objetos javascript

Holas, el problema es que los objetos tienen que estar declarados para poder acceder a ellos, por ej:

Código HTML:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2.     <head>
  3.         <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  4.         <title>Objetos JS</title>
  5.         <script type="text/javascript" src="jquery.js"></script>
  6.         <script type="text/javascript">
  7.             var objeto;
  8.            
  9.             function Gato (color, edad) {
  10.                 this.color = color;
  11.                 this.edad = edad;
  12.                 this.mostrar = mostrar;
  13.                 this.cambiare = cambiare;
  14.             }
  15.  
  16.             function crear() {
  17.                 var color = "Negro";
  18.                 var edad = 10;
  19.                 objeto = new Gato(color, edad)
  20.                 objeto.mostrar();
  21.                 objeto.cambiare();
  22.             }
  23.            
  24.             function mostrar(){
  25.                 var $p = $('<p>');
  26.                 var id = "textogato";
  27.                 var $objeto = $p.attr("id", id);
  28.                 var $texto = this.color;
  29.                 var $objeto = $p.text($texto);  
  30.                 $objeto.css("display", "inline");
  31.                 $objeto.css("background", "red");
  32.                 $objeto.css("font-size", "20px");
  33.                 $objeto.css("color", "blue");
  34.                 $objeto.appendTo('body');
  35.             }
  36.  
  37.             function cambiare () {
  38.                 this.edad++;
  39.                 alert("Nueva edad: " + this.edad)
  40.             }
  41.            
  42.             function aumentarEdad () {
  43.                 objeto.cambiare();
  44.             }
  45.          </script>
  46.     </head>
  47.     <body>
  48.         <input type="button" value="Crear objeto" onclick="crear();">
  49.         <input type="button" value="Aumentar edad" id="edad" onclick="aumentarEdad();">
  50.     </body>
  51. </html>

si alguien sabe como declarar objetos dinámicamente y acceder a ellos, q lo diga, necesito saberlo también
  #6 (permalink)  
Antiguo 15/02/2011, 23:59
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 17 años, 2 meses
Puntos: 20
Respuesta: Objetos javascript

Que tal, creo que deberian de investigar un poquito mas antes de iniciar con la Javascript OO. Tambien investiga closures.

Te dejo algunos links que te pueden servir:

https://developer.mozilla.org/en/Int...ted_JavaScript
https://developer.mozilla.org/en/Jav...Guide/Closures

Un ejemplo de como lograr lo que quieren hacer (como yo lo haria):
Código Javascript:
Ver original
  1. function Perro(){}
  2.  
  3. Perro.prototype = {
  4.     edad: 1,
  5.    aumentarEdad: function(){
  6.        this.edad++;
  7.    }
  8. }
  9.  
  10.  
  11. var p;
  12.  
  13. document.getElementById('crear').addEventListener('click', function(){}
  14.      if(!p){
  15.            p = new Perro();
  16.      }
  17. }, true);
  18. document.getElementById('edad').addEventListener('click', function(){
  19.     if(!p) {
  20.        alert('el objeto no esta creado');
  21.        return false;
  22.     }
  23.     p.aumentarEdad();
  24. }, true);


Saludos.
__________________
I see dead pixels
  #7 (permalink)  
Antiguo 16/02/2011, 04:35
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 17 años
Puntos: 2
Respuesta: Objetos javascript

Cita:
Iniciado por SergeMedina Ver Mensaje
Que tal, creo que deberian de investigar un poquito mas antes de iniciar con la Javascript OO. Tambien investiga closures.

Te dejo algunos links que te pueden servir:

https://developer.mozilla.org/en/Int...ted_JavaScript
https://developer.mozilla.org/en/Jav...Guide/Closures

Un ejemplo de como lograr lo que quieren hacer (como yo lo haria):
Código Javascript:
Ver original
  1. function Perro(){}
  2.  
  3. Perro.prototype = {
  4.     edad: 1,
  5.    aumentarEdad: function(){
  6.        this.edad++;
  7.    }
  8. }
  9.  
  10.  
  11. var p;
  12.  
  13. document.getElementById('crear').addEventListener('click', function(){}
  14.      if(!p){
  15.            p = new Perro();
  16.      }
  17. }, true);
  18. document.getElementById('edad').addEventListener('click', function(){
  19.     if(!p) {
  20.        alert('el objeto no esta creado');
  21.        return false;
  22.     }
  23.     p.aumentarEdad();
  24. }, true);


Saludos.
Buenas,
Acabo de leer los link que me pasaste y tengo algunas dudas.
No logro entender del todo para que se utliza la propiedad, prototype estoy muy confuso respecto a esto.
Si me lo pudieran aclarar un poco.

Saludos
  #8 (permalink)  
Antiguo 16/02/2011, 11:57
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 17 años, 2 meses
Puntos: 20
Respuesta: Objetos javascript

Basicamente lo que hace el objeto prototype es aumentar funcionalidades en el nuevo "tipo de dato" que estas creando. Este nuevo tipo de dato parte del objeto Function, por lo que el tipo de dato nuevo tendra los mismos atributos y metodos que esten declarados en el objeto prototype de Function.

En el ejemplo que te di, estoy creando un tipo de dato Perro. El objeto prototype me permite agregarle los metodos y propiedades que ese tipo de dato va a tener. Por lo que todas las instancias tendran los mismos objetos y propiedades que las que estan declaradas en prototype.

Te dejo estos links adicionales para que los leas.

http://dmitrysoshnikov.com/ecmascrip...eneral-theory/
http://dmitrysoshnikov.com/ecmascrip...ript-the-core/

Saludos.
__________________
I see dead pixels
  #9 (permalink)  
Antiguo 16/02/2011, 12:33
 
Fecha de Ingreso: febrero-2011
Ubicación: Evolandia
Mensajes: 103
Antigüedad: 13 años, 9 meses
Puntos: 10
Respuesta: Objetos javascript

Investigando por sugerencia, acá hay un buen resumen para los que no entienden muy bien ingles como yo, sobre la propiedad prototype, y el manejo de clases en js:

http://www.librosweb.es/ajax/capitulo3/clases.html
  #10 (permalink)  
Antiguo 16/02/2011, 13:45
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 17 años
Puntos: 2
Respuesta: Objetos javascript

Cita:
Iniciado por SergeMedina Ver Mensaje
Basicamente lo que hace el objeto prototype es aumentar funcionalidades en el nuevo "tipo de dato" que estas creando. Este nuevo tipo de dato parte del objeto Function, por lo que el tipo de dato nuevo tendra los mismos atributos y metodos que esten declarados en el objeto prototype de Function.

En el ejemplo que te di, estoy creando un tipo de dato Perro. El objeto prototype me permite agregarle los metodos y propiedades que ese tipo de dato va a tener. Por lo que todas las instancias tendran los mismos objetos y propiedades que las que estan declaradas en prototype.

Te dejo estos links adicionales para que los leas.

http://dmitrysoshnikov.com/ecmascrip...eneral-theory/
http://dmitrysoshnikov.com/ecmascrip...ript-the-core/

Saludos.

Código Javascript:
Ver original
  1. function Perro(){}
  2.  
  3.  
  4. Perro.prototype = {
  5.  
  6.     edad: 1,
  7.  
  8.    aumentarEdad: function(){
  9.  
  10.        this.edad++;
  11.  
  12.    }
  13.  
  14. }

pero si no utilizaras el prototype como lo harias??

por lo que entendi el protoype es una forma de simplificar el codigo ya que utlizandolo en un clase se aplican a todos los objetos no??

Saludos
  #11 (permalink)  
Antiguo 16/02/2011, 14:02
 
Fecha de Ingreso: diciembre-2010
Ubicación: valencia
Mensajes: 203
Antigüedad: 13 años, 11 meses
Puntos: 11
Respuesta: Objetos javascript

Código Javascript:
Ver original
  1. function Perro()
  2. {
  3.  this.edad = 1;
  4.  this.aumentarEdad = function() {
  5.                       this.edad++;
  6.                      }
  7.  this.mostrarEdad = function() {
  8.                      alert(this.edad);
  9.                     }
  10. }

Etiquetas: objetos
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 18:38.