Foros del Web » Programando para Internet » Javascript »

Instanciar como objeto la siguiente clase

Estas en el tema de Instanciar como objeto la siguiente clase en el foro de Javascript en Foros del Web. Hola. Resulta que creo la siguiente clase en JavaScript : El código es el siguiente. Código PHP: // Trabaja para mostrar datos de TABLA var  accionesTablaListing  = {          container :  null ...
  #1 (permalink)  
Antiguo 15/03/2012, 04:25
 
Fecha de Ingreso: agosto-2009
Mensajes: 101
Antigüedad: 14 años, 7 meses
Puntos: 0
Instanciar como objeto la siguiente clase

Hola.
Resulta que creo la siguiente clase en JavaScript:

El código es el siguiente.
Código PHP:
// Trabaja para mostrar datos de TABLA
var accionesTablaListing = {
        
containernull,
        
DivTonull,
        
        
init: function (contenedorDT ) {
            
this.container = $(contenedor);
            
this.DivTo = $('#'+DT);
                
// Acciones dentro de la Tabla
            
this.container.find('a').on('click', function () {
                var 
$this = $(this);
                var 
$this.closest('tr').data('id');
                var 
$this.data('action'); 
                                
// console.log('Enviado a: '+a+b);
            
}
}; 
Por otro lado, me gustaria crear una variable :
Código PHP:
var mivar = new accionesTablaListing (); 
Pero me da error, y no se como proceder.

En cambio, si escribo
Código PHP:
var mivar accionesTablaListing 
no tengo problema.

El motivo de querer instanciar una variable a un evento es porque dicha clase quiero usarla en distintas partes de la aplicación, y no se cómo prodecer.

Agradezco de antemano la ayuda!
  #2 (permalink)  
Antiguo 15/03/2012, 05:12
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 12 años, 11 meses
Puntos: 343
Respuesta: Instanciar como objeto la siguiente clase

Por partes:

1. JavaScript no tiene clases, lo correcto es llamarlo constructores.
2. Los constructores se instancian con el operador new.
3. Los constructores son funciones (acá falla tu ejemplo).
4. Por convención, todos los constructores llevan nombre capitalizado (AccionesTablaListing)

Implementación posible (notar la función y el prototipo):

Código Javascript:
Ver original
  1. // Trabaja para mostrar datos de TABLA
  2. var AccionesTablaListing = function(contenedor, DT) {
  3.     this.container = $(contenedor);
  4.     this.DivTo = $('#'+DT);
  5.         // Acciones dentro de la Tabla
  6.     this.container.find('a').on('click', function () {
  7.         var $this = $(this);
  8.         var b = $this.closest('tr').data('id');
  9.         var a = $this.data('action');
  10.                         // console.log('Enviado a: '+a+b);
  11.     });
  12. };
  13.  
  14.  
  15. AccionesTablaListing.prototype = {
  16.         container: null,
  17.         DivTo: null,
  18.         anotherFunction: function() { alert('HELLO WORLD') }
  19. };  
  20.  
  21.  
  22. var foo = new AccionesTablaListing(body, 'foo');
  23.  
  24. foo.anotherFunction(); // "HELLO WORLD"

EDIT: Tu ejemplo tiene llaves mal cerradas además.
__________________
blog | @aijoona
  #3 (permalink)  
Antiguo 15/03/2012, 05:46
 
Fecha de Ingreso: agosto-2009
Mensajes: 101
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Instanciar como objeto la siguiente clase

ni que decir tiene, MIL GRACIAS!
Ahora lo veo ... mucho más claro!
  #4 (permalink)  
Antiguo 15/03/2012, 06:42
 
Fecha de Ingreso: agosto-2009
Mensajes: 101
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Instanciar como objeto la siguiente clase

En mi ejemplo tengo mal las llaves porque eliminé unas cuantas lineas de código, innecesarias para solventar el problema que tengo. El caso es que la función ya me funciona correctamente!

Ahora estoy cambiando otro código y me encuentro con otro problema.

El código cambiado es el siguiente:
Código Javascript:
Ver original
  1. // Control de Paginas en Listing.asp
  2. var BotonesPaginado = function (contenedor , base, ASPDestino) {
  3.             this.container = $(contenedor);
  4.             this.pagina = this.container.find('#spage');
  5.             this.container.find('a').on('click', function () {
  6.                     var a = $(this).data('ira');
  7.                     var b = this.pagina.val();
  8.                     console.log('b');
  9.                     });
  10. };
  11. BotonesPaginado.prototype = {
  12.         container: null,
  13.         pagina: null,
  14. };

El problema lo tengo en la línea 7
var b = this.pagina.val();
Porque quiero recuperar el valor de un INPUT que está almacenado en this.pagina, pero al ejecutar una llamada click, me dice q es "undefined".

¿cómo hago para pasarle el valor que tiene que ser?

De nuevo, mil gracias!
  #5 (permalink)  
Antiguo 15/03/2012, 06:46
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 12 años, 11 meses
Puntos: 343
Respuesta: Instanciar como objeto la siguiente clase

Dentro del event handler el thisValue se corresponde con el objeto jQuery y no con tu instancia.

Podes resolverlo mediante binding o una referencia externa:

Código Javascript:
Ver original
  1. var BotonesPaginado = function (contenedor , base, ASPDestino) {
  2.             this.container = $(contenedor);
  3.             this.pagina = this.container.find('#spage');
  4.            
  5.             // Referencia al objeto actual
  6.             var self = this;
  7.            
  8.             this.container.find('a').on('click', function () {
  9.                 var a = $(this).data('ira');
  10.                 // En lugar de this, usa la referencia externa
  11.                 var b = self.pagina.val();
  12.                 console.log('b');
  13.             });
  14. };
__________________
blog | @aijoona
  #6 (permalink)  
Antiguo 15/03/2012, 06:52
 
Fecha de Ingreso: agosto-2009
Mensajes: 101
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Instanciar como objeto la siguiente clase

Pues la respuesta ha sido más fácil de lo esperado:
Código Javascript:
Ver original
  1. var p = this.pagina;

y dentro de la funcion que espera el 'click':
Código Javascript:
Ver original
  1. var b = p.val();

Muchas gracias!

Etiquetas: clase, instanciar, objeto, siguiente
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 07:53.