quando passo 'questo' ad una funzione anonima in questo modo:Come vengono trasmessi i dati alle funzioni anonime in JavaScript?
MyClass.prototype.trigger = function(){
window.setTimeout(function(){this.onTimeout();},1000);
}
ottengo "this.onTimeout non è una funzione" -Errore. Immagino che "questo" non sia più disponibile al momento dell'esecuzione della funzione anonima? Così ho fatto questo:
MyClass.prototype.trigger = function(){
var me = this
window.setTimeout(function(){me.onTimeout();},1000);
}
È davvero così che dovresti fare le cose? Funziona un po ', ma sembra strano.
Poi abbiamo questo esempio:
$(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();
});
This uscite:
2
2
Qualora non fosse uscita:
1
2
invece? Poi ho scoperto che mettere il $ GetJSON-dichiarazione in un'altra funzione rende tutto il lavoro:
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); });
}
Questo uscite: (. O viceversa)
1
2
cosa sta succedendo qui? Qual è il modo giusto per passare variabili a una funzione anonima?
Ci scusiamo per il post confuso e lungo.
Cool! Molte grazie! Hm, immagino di essere abbastanza comodo con il funzionamento di js. È un po 'come LUA. È solo che continuo a pensare "Java" e questo non vale davvero – 0scar