Cuando paso 'esto' a una función anónima, así:¿Cómo se transmiten los datos a funciones anónimas en JavaScript?
MyClass.prototype.trigger = function(){
window.setTimeout(function(){this.onTimeout();},1000);
}
me sale un "this.onTimeout no es una función" -error. Supongo que 'esto' ya no está disponible en el momento en que se está ejecutando la función anónima. Así que he estado haciendo esto:
MyClass.prototype.trigger = function(){
var me = this
window.setTimeout(function(){me.onTimeout();},1000);
}
¿Es así como se supone que debes hacer las cosas? Funciona un poco, pero se siente raro.
entonces tenemos este ejemplo:
$(function(){
function MyClass(){
this.queue = new Array();
}
MyClass.prototype.gotAnswer = function(count){
$('body').append("count:"+count+"<br/>");
}
MyClass.prototype.loadAll = function(){
var count = 0;
var item;
while(item = this.queue.pop()){
count++;
var me = this;
$.getJSON("answer.html",{},function(data){me.gotAnswer(count);});
}
}
var o = new MyClass();
o.queue.push(1);
o.queue.push(2);
o.loadAll();
});
Este salidas:
2
2
¿No debería de salida:
1
2
en su lugar? Entonces descubrí que poner el $ .getJSON-declaración en otra función que hace todo el trabajo:
MyClass.prototype.loadAll = function(){
var count = 0;
var item;
while(item = this.queue.pop()){
count++;
this.newRequest(count);
}
}
MyClass.prototype.newRequest = function(count){
var me = this;
$.getJSON("answer.html",null,function(data){ me.gotAnswer(count); });
}
Este salidas: (. O al revés)
1
2
¿Qué está pasando aquí? ¿Cuál es la forma correcta de pasar variables a una función anónima?
Lo siento por la publicación confusa y larga.
¡Genial! ¡Muchas gracias! Hm, creo que en realidad estoy bastante cómodo con cómo funciona js. Es un poco como LUA. Es solo que sigo pensando "Java" y eso realmente no se aplica ... – 0scar