Foros del Web » Programando para Internet » Javascript »

crear paquetes con varias clases

Estas en el tema de crear paquetes con varias clases en el foro de Javascript en Foros del Web. Hola de nuevo, hacía tiempo que no venía por este foro... Quisiera plantearos un problema que me ha salido y no se como se puede ...
  #1 (permalink)  
Antiguo 06/06/2007, 20:55
 
Fecha de Ingreso: octubre-2004
Ubicación: Cork (Irlanda)
Mensajes: 161
Antigüedad: 20 años, 2 meses
Puntos: 1
crear paquetes con varias clases

Hola de nuevo, hacía tiempo que no venía por este foro...

Quisiera plantearos un problema que me ha salido y no se como se puede solucionar (seguro que se puede).

Veréis, estoy intentando hacer un paquete que contenga un conjunto de clases, lo hago de la siguiente forma:

Código:
var MyPackage = new Object();
con esto tengo el paquete, para añadir una clase hago:

Código:
MyPackage.ClassOne = function(){
  var a = false;
}

MyPackage.ClassOne.prototype = {
  Init: function(){
    this.a = 1;
    document.getElementById("some").addEventListener("click",this.Func2,false);
  },
  Func1: function(){
    alert(this.a);
  },
  Func2: function(){
    this.Func1();
  }
}
Esto lo tengo en un fichero llamado pack.js.

En el fichero HTML tengo lo siguiente:
Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
  <title>Pruebas</title>
  <script type="text/javascript" src="pack.js"></script>
</head>

<body>
  <span id="some">aqui</span>
  <script type="text/javascript">
    var mypack = new MyPackage.ClassOne();
    mypack.Init();
  </script>
</body>
</html>
Al hacer click sobre el texto aqui me aparece el siguiente error:
this.Func1 is not a function ...

Vaya, con lo guay que me iba a quedar...

Haciendo mil pruebas me he dado cuenta de que al ejecutarse Func2 a través de un evento, el this de Func2 es el elemento que invoca ese método y no la clase tan chula que yo había hecho

De hecho si pongo mypack.Func2() después de llamar a mypack.Init() si que aparece el alert de Func1().

Entonces... si aun estáis leyendo esto... () supongo que habréis deducido que quiero que eso no pase... es decir... que siempre que llame a this éste haga referencia a la clase y no a cualquier otra cosa...

¿Algún tutorial sobre esto?
¿Alguna modificación sencilla?
¿Alguna forma alternativa para crear objetos en javascript? (estoy haciéndolo así porque lo he visto en otro paquete, no porque sepa que se hace así)...

Ojalá alguien me pueda echar un cable, un saludo!
  #2 (permalink)  
Antiguo 07/06/2007, 06:01
 
Fecha de Ingreso: octubre-2004
Ubicación: Cork (Irlanda)
Mensajes: 161
Antigüedad: 20 años, 2 meses
Puntos: 1
Re: crear paquetes con varias clases

Bueno, ya está solucionado. En la librería prototype existen unos métodos bind() y bindAsEventListener()...
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 19:08.