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!