Hola
miguelcubas:
Hace tiempo me encontré con el mismo problema que tú, exactamente el mismo planteamiento. De hecho si creas más instancias de
AA() entonces no hay solución (aparentemente).
El error es entendible, ocurre que una llamada a
CC.BB() va a funcionar en todo momento, incluso una vez acabada la ejecución del script. Esto es porque
CC está definido para todo el ámbito de la página mientras esté abierta. Sin embargo
this sólo está definido para el ámbito de ejecución de la función (o método en sí). Después ese
this no significa nada ni referencia a nada de nada. Por lo tanto, después de un segundo,
this no tiene valor ni apunta a nada.
Lo resolví haciendo la variable
CC global, tal y como lo tienes tú. Pero, ¿
cómo sabemos dentro del método qué nombre tiene esa variable de ámbito global que contiene la instancia del objeto? Como ves, estoy por saberlo. Para FF funciona, para IE aún no encuentro solución.
Lo que hice fue crearle un número de serie con
Math.random() y almacenar la misma instancia en un array que es de ámbito global. Lo tienes todo en este hilo:
aporte: programacion secuencial. Entonces, éste código (que es parecido al que tú tienes):
Código PHP:
function coxe() {
this.velocidad=50;
this.frenar=function() {
if(this.velocidad>0) {
this.velocidad--;
setTimeout("this.frenar()", 100);
}
}
}
Se ha de transformar en éste:
Código PHP:
var coxes=new Array();
function coxe() {
//crear serial para guardar el objeto globalmente
do {
this.serial=parseInt(Math.random()*1000);
} while(coxes[this.serial]!=undefined);
coxes[this.serial]=this;
this.velocidad=50;
this.frenar=function() {
if(this.velocidad>0) {
this.velocidad--;
setTimeout("coxes["+this.serial+"].frenar()", 100);
}
}
}
Y así
coxes[serialDeUnCoxe] apuntará a la instancia de
coxe() que tenga ese serial. Entonces sí que podemos hacer fácilmente el bucle, utilizando un array de ámbito global. Otra cosa es que el serial creado coincida con otro que ya ha sido creado (ojo si creas 10 millones de instancias de
coxe() ).
Bueno, si a alguien se le ocurre otra idea, todavía está a tiempo de postear! jeje.
Un saludo.