Quand je passe « ce » à une fonction anonyme comme ceci:Comment les données sont-elles transmises aux fonctions anonymes en JavaScript?
MyClass.prototype.trigger = function(){
window.setTimeout(function(){this.onTimeout();},1000);
}
je reçois un « this.onTimeout est pas une fonction » -erreur. Je suppose que 'ceci' n'est plus disponible au moment où la fonction anonyme est en cours d'exécution? Donc, je fais ceci:
MyClass.prototype.trigger = function(){
var me = this
window.setTimeout(function(){me.onTimeout();},1000);
}
Est-ce vraiment la façon dont vous êtes censé faire des choses? Ca marche un peu, mais ça fait bizarre.
Ensuite, nous avons cet exemple:
$(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();
});
Ce sorties:
2
2
ne devrait-elle sortie:
1
2
à la place? Ensuite, j'ai découvert que mettre la déclaration .getJSON $ dans une autre fonction fait tout le travail:
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); });
}
Cette sortie: (. Ou l'inverse)
1
2
Qu'est-ce qui se passe ici? Quelle est la bonne façon de passer des variables à une fonction anonnymous?
Désolé pour le poste confus et longue.
Cool! Merci beaucoup! Hm, je suppose que je suis en fait tout à fait à l'aise avec la façon dont js fonctionne. C'est un peu comme LUA. C'est juste que je continue à penser "Java" et ça ne s'applique pas vraiment .. – 0scar