Foros del Web » Programando para Internet » Javascript »

asignacion de atributos en javascript

Estas en el tema de asignacion de atributos en javascript en el foro de Javascript en Foros del Web. Hola a todos les solicito su ayuda en lo siguiente: Estoy trabajando con javascript orientado a objetos y he creado una clase que tiene un ...
  #1 (permalink)  
Antiguo 12/04/2011, 14:35
 
Fecha de Ingreso: diciembre-2010
Mensajes: 32
Antigüedad: 13 años, 4 meses
Puntos: 0
asignacion de atributos en javascript

Hola a todos les solicito su ayuda en lo siguiente:

Estoy trabajando con javascript orientado a objetos y he creado una clase que tiene un atributo xml que representa un objeto xml document. La idea es que este sea un atributo que tenga un set y un get como normalmente se hace en la POO. Pero el atributo no es capaz de tener caracter global. Cuando uso el método set para asignarle el parámetro, lo asigna bn pero fuera del método set no tiene valor el atributo, es decir que el atributo para que tome valor debe ejecutarse el metodo set antes de usarlo y eso es un problema xD porque tocaria poner un atributo cada vez q necesite el objeto xml y eso es precisamente lo que trato de evitar.
Bueno ahi se las dejo y gracias de antemano por la valiosa ayuda :)
Código PHP:
/**
 * @author kamilo
 */
var parseData = function(){
    
this.xml;
    
    
this.setXML = function(xmldom){
        
this.xml xmldom;
        
alert(this.xml); // aqui devuelve el objeto xml normal
    
}
    
    
this.getXML = function(){
        
alert(this.xml); // aqui es undefined :/
        
return this.xml;
    }
    
    
this.parseXML = function(){
        
alert(this.getXML);  // aqui es undefined tambien :/
        
$(this.xml).find("Tutorial").each(function(){
            $(
"#output").append($(this).attr("author") + "<br />");
        });
    }

  #2 (permalink)  
Antiguo 12/04/2011, 15:25
Avatar de laratik  
Fecha de Ingreso: mayo-2010
Ubicación: Cali
Mensajes: 317
Antigüedad: 13 años, 10 meses
Puntos: 63
Respuesta: asignacion de atributos en javascript

Extraño... a mi en los dos alert me aparece 123:

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2. var parseData = function(){
  3.     this.xml;
  4.      
  5.     this.setXML = function(xmldom){
  6.         this.xml = xmldom;
  7.         alert(this.xml); // aqui devuelve el objeto xml normal
  8.     }
  9.      
  10.     this.getXML = function(){
  11.         alert(this.xml); // aqui es undefined :/
  12.         return this.xml;
  13.     }
  14.      
  15.     this.parseXML = function(){
  16.         alert(this.getXML);  // aqui es undefined tambien :/
  17.         $(this.xml).find("Tutorial").each(function(){
  18.             $("#output").append($(this).attr("author") + "<br />");
  19.         });
  20.     }
  21. }
  22.  
  23. function cargar() {
  24.     var obj = new parseData();
  25.     obj.setXML("123");
  26.     obj.getXML();
  27. }
  28.  
  29. window.onload = cargar;
  30. </script>

Ya que estas trabajando con pseudoclases (la POO en javascript no existe, es una ilución ) deberías adjudicarle los métodos al prototype de la clase, de esta manera (según tengo entendido) se maneja de una manera más optima la memoria, al no tener que crear los mismos métodos cada vez que instancias un nuevo objeto.

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2. var parseData = function(){
  3.     this.xml;  
  4.      
  5.     this.parseXML = function(){
  6.         alert(this.getXML);  // aqui es undefined tambien :/
  7.         $(this.xml).find("Tutorial").each(function(){
  8.             $("#output").append($(this).attr("author") + "<br />");
  9.         });
  10.     }
  11. }
  12.  
  13. parseData.prototype.setXML = function(xmldom){
  14.         this.xml = xmldom;
  15.         alert(this.xml); // aqui devuelve el objeto xml normal
  16.     }
  17.  
  18. parseData.prototype.getXML = function(){
  19.         alert(this.xml); // aqui es undefined :/
  20.         return this.xml;
  21.     }
  22.  
  23. function cargar() {
  24.     var obj = new parseData();
  25.     obj.setXML("123");
  26.     obj.getXML();
  27. }
  28.  
  29. window.onload = cargar;
  30. </script>

Si entiendo bien lo ultimo que leí de tu mensaje, lo que quieres es no tener que utilizar setXML() cada vez que creas un objeto. Pues asignalo directamente como "constructor":

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2. var parseData = function(xmldom){
  3.     this.xml = xmldom;
  4.      
  5.     this.setXML = function(xmldom){
  6.         this.xml = xmldom;
  7.         alert(this.xml); // aqui devuelve el objeto xml normal
  8.     }
  9.      
  10.     this.getXML = function(){
  11.         alert(this.xml); // aqui es undefined :/
  12.         return this.xml;
  13.     }
  14.      
  15.     this.parseXML = function(){
  16.         alert(this.getXML);  // aqui es undefined tambien :/
  17.         $(this.xml).find("Tutorial").each(function(){
  18.             $("#output").append($(this).attr("author") + "<br />");
  19.         });
  20.     }
  21. }
  22.  
  23. function cargar() {
  24.     var obj = new parseData("345");
  25.     obj.getXML();
  26.     obj.setXML("123");
  27.     obj.getXML();
  28. }
  29.  
  30. window.onload = cargar;
  31. </script>
__________________
Programar apasiona y lo que apasiona es un arte, por lo tanto programar es un arte.

Quiero karma para en mi próxima vida ser un billonario bien dotado con alas.

Última edición por laratik; 12/04/2011 a las 15:50
  #3 (permalink)  
Antiguo 12/04/2011, 20:21
 
Fecha de Ingreso: diciembre-2010
Mensajes: 32
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: asignacion de atributos en javascript

gracias por la respuesta lo he solucionado de una forma un tanto diferente aunque he tenido en cuenta lo de los prototype como tu bien dices para no saturar la memoria :) por otro lado, no puedo usar el constructor con parámetros porque estoy creando un objeto ajax con jquery de esta forma:

Código PHP:
$.ajax({
type"GET",
url"data.xml",
dataType"xml",
successthis.parseXML1
}); 
en success va el metodo que se ejecuta al realizar la peticion ajax a la cual se le pasa por parametro el objeto xml, intente poner el constructor alli pero no fue posible instanciarlo correctamente. En cuanto pueda hare un post explicando este tema dado que hay muchos que les va a interesar. Muchas gracias por tu pronta respuesta :)
  #4 (permalink)  
Antiguo 15/04/2011, 23:32
 
Fecha de Ingreso: diciembre-2010
Mensajes: 32
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: asignacion de atributos en javascript

bueno he hecho el post explicando lo que hice.... esto consiste en ajax en múltiples navegadores. Mirar -> http://www.group64bits.co.cc/2011/04/trabajando-con-ajax-en-multiples.html
  #5 (permalink)  
Antiguo 16/04/2011, 05:45
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: asignacion de atributos en javascript

Cita:
Iniciado por Tsugoi Ver Mensaje
por otro lado, no puedo usar el constructor con parámetros porque estoy creando un objeto ajax con jquery de esta forma:
Código PHP:
$.ajax({
type"GET",
url"data.xml",
dataType"xml",
successthis.parseXML1
}); 
No puedes poner argumentos porque ahí tiene que ir un handler. Es decir:
Código Javascript:
Ver original
  1. function prueba(param){
  2.  return param;
  3. }
  4. var fn = prueba; // fn = function(param){ ... }
  5. var result = prueba('123'); // result = '123'
Si le pasas los argumentos se invoca la función y devuelve el resultado, no un handler. Para solucionar esto:
Código Javascript:
Ver original
  1. ...
  2. succes : function(){ este.parseXML(params) },
  3. este : this
  4. ...
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red

Etiquetas: poo
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 23:19.