2009-09-18 10 views
0

Je le code suivant:JavaScript SetInterval - pointeur de fonction passe au lieu de chaîne

XService.start = function() { 
    setInterval("XService.poll()", XService.pollInterval); } 

Cela fonctionne très bien. Cependant, quand je le fais (fonction qui passe comme référence au lieu d'avoir la chaîne eval'd) il cesse de fonctionner:

XService.start = function() { 
    setInterval(XService.poll, XService.pollInterval); } 

Pourquoi? Qu'est-ce que je fais mal? Rien d'autre ne change dans mon code. J'ai aussi essayé XService.poll() dans la deuxième version mais pas de dés non plus. La documentation que j'ai lue a laissé le() dehors.

Aide?

Editer: XService.poll est une fonction; XService.pollInterval est un nombre. Les deux sont déclarés et assignés correctement.

Edit2: Le code Xservice:

XService = {}; 
XService.pollUrl = "/Poll"; 
XService.pollInterval = 60000; 
XService.poll = function() { 
    $.get(this.pollUrl, null, null, "text"); } 
XService.start = function() { 
    setInterval(XService.poll, XService.pollInterval); } 

Répondre

1

est XService.poll une 'fonction' et 'XService.pollInterval' un certain nombre à ce moment précis?

Edit: Depuis que vous avez publié le code pour le moment ..

setInterval(

    function() { 
     XService.poll(); 
    }, XService.pollInterval 

); 
+0

Obtenez-vous des erreurs? –

+0

Peut-on voir tout le code pour XService? Cela peut avoir à voir avec la façon dont il est défini et en ce qui concerne les comportements en temps réel/temps d'exécution et comment l'évaluation est exécutée différemment. –

+0

Publié le code XService – Alex

0

Qu'est-ce que la fonction est liée à des changements. Lorsque vous appelez le premier, votre instruction 'this' est liée à l'objet XService. Lorsque vous appelez le second, votre instruction 'this' est liée à l'objet window.

par exemple, disons que nous avons Xservice avec un tel sondage

function poll(){ alert(this); } 

si le premier exemple, il alertera l'objet Xservice, mais dans le second exemple, il alertera l'objet de la fenêtre.

Je ne sais pas la syntaxe sauf dans Mootools, mais mootoos vous appelleriez

setInterval(XService.poll.bind(XService), 100) 

et il appelle la méthode correctement

+0

Ahhhhh cette déclaration dans la fonction de sondage est le coupable alors je suppose! – Alex

+0

Faire ce que CMS a dit fonctionnera et corrigera les problèmes de liaison (en utilisant une fonction anonyme) –

Questions connexes