Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Problema en clase

Estas en el tema de Problema en clase en el foro de Javascript en Foros del Web. Buenas gente, espero esten bien. Veran, resulta que estoy desarrollando una clase en JS pero me da problemas al reconocer sus propiedades o el propio ...
  #1 (permalink)  
Antiguo 15/08/2019, 18:50
 
Fecha de Ingreso: agosto-2015
Ubicación: Rosario - Argentina
Mensajes: 418
Antigüedad: 4 años, 1 mes
Puntos: 11
Problema en clase

Buenas gente, espero esten bien.

Veran, resulta que estoy desarrollando una clase en JS pero me da problemas al reconocer sus propiedades o el propio this

Esto solo pasa cuando utilizo funciones externas, en este caso el conocido $.ajax({ ... });

Aqui dejare mi clase:

Código Javascript:
Ver original
  1. class MY_CLASS{
  2.  
  3.     constructor(){
  4.         this.ListOfImages = {LIST: [], CURRENT: 0};
  5.  
  6.         return this;
  7.     }
  8.  
  9.     GET_IMAGES(){
  10.         $.ajax({
  11.             url: "images.controller.php",
  12.             success: this.success,
  13.             error: this.error
  14.         });
  15.     }
  16.  
  17.     success(data){
  18.         // SI FUNCIONA //
  19.         images.ListOfImages.LIST = JSON.parse(data);
  20.         console.log(images.ListOfImages.LIST);
  21.         // NO FUNCIONA //
  22.         this.ListOfImages.LIST = JSON.parse(data);
  23.         console.log(this.ListOfImages.LIST);
  24.     }
  25.  
  26.     error(){
  27.         console.log("URL FAILED!");
  28.     }
  29.  
  30. }

Bueno, basicamente me gustaria saber porque no me reconoce sus propiedades cuando llamo a un metodo de clase en el ajax, es como si dentro de ese metodo de clase no fuera de la clase... porque no reconoce absolutamente nada..

Cabe mencionar por si las dudas, que la instancia de la clase es el objeto images utilizado dentro del metodo success(){ ... }

Espero puedan darme una mano para saber como llegar al metodo success(){ ... } sin tener estos problemas.

desde ya muchas gracias!!
  #2 (permalink)  
Antiguo 16/08/2019, 09:43
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.467
Antigüedad: 11 años, 6 meses
Puntos: 1072
Respuesta: Problema en clase

efectivamente al invocar this ya no estas invocandolo de la clase

Prueba con

Código Javascript:
Ver original
  1. GET_IMAGES(){
  2. let this_ = this;
  3.         $.ajax({
  4.             url: "images.controller.php",
  5.             success: this_.success,
  6.             error: this_.error
  7.         });
  8.     }
  #3 (permalink)  
Antiguo 16/08/2019, 10:33
 
Fecha de Ingreso: agosto-2015
Ubicación: Rosario - Argentina
Mensajes: 418
Antigüedad: 4 años, 1 mes
Puntos: 11
Respuesta: Problema en clase

Cita:
Iniciado por ArturoGallegos Ver Mensaje
Efectivamente sirve, tanto como usar
Código:
self = this
La pregunta es ¿como seguir usando this? o.. ¿por que funciona this al pasarlo en una variable pero no al usarlo directamente?

puedo seguir el script usando this_ o self, pero quiero saber porque sucede esto y si mas alla de estas dos alternativas, podemos volver a retomar el control de this
  #4 (permalink)  
Antiguo 16/08/2019, 11:08
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.467
Antigüedad: 11 años, 6 meses
Puntos: 1072
Respuesta: Problema en clase

Esto sucede porque la funcion que estas invocando tiene su propio this que sobreescribe al que tenias antes, por lo que se pierde la informacion del elemento padre por llamarle de una forma.

Claro que esto solo afecta a esa función y su contenido, todo lo que trabajes fuera de esta sigue estando vinculado al this de tu clase principal o contenedor.

No hay forma de utilizar el this del padre directamente en el hijo, ya que son objetos separados., lo que tienes que hacer es referenciarlos en una variable que no entre en conflicto.
  #5 (permalink)  
Antiguo 16/08/2019, 11:18
 
Fecha de Ingreso: agosto-2015
Ubicación: Rosario - Argentina
Mensajes: 418
Antigüedad: 4 años, 1 mes
Puntos: 11
Respuesta: Problema en clase

Cita:
Iniciado por ArturoGallegos Ver Mensaje
Bueno, muchas gracias por todo, ha sido de mucha ayuda!!



La zona horaria es GMT -6. Ahora son las 04:41.