2009-09-18 75 views
0

我有以下代码:的JavaScript的setInterval - 传递函数指针,而不是字符串

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

这个伟大的工程。然而,当我这样做(传递函数作为参考,而不是具有串eval'd)停止工作:

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

为什么?我究竟做错了什么?我的代码中没有其他更改。我也在第二个版本中尝试了XService.poll(),但也没有使用骰子。我读的文件说离开()。

帮助?

编辑:XService.poll是一个函数; XService.pollInterval是一个数字。两者都被正确声明和分配。

EDIT2:本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); } 

回答

1

是XService.poll一个 '功能' 和 'XService.pollInterval' 许多在该特定时间?

编辑:既然你刚才发布的代码..

setInterval(

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

); 
+0

您是否收到任何错误? – 2009-09-18 20:37:11

+0

我们可以看到XService的整个代码吗?它可能与它被定义的方式以及实时/运行时行为以及eval如何执行不同有关。 – 2009-09-18 20:38:03

+0

发表了XService代码 – Alex 2009-09-18 20:40:26

0

什么功能必然要改变。

当你调用第一个时,你的'this'语句被绑定到XService对象。 当你调用第二个时,你的'this'语句被绑定到窗口对象。

例如,假设我们有帐户Xservice调查这样

function poll(){ alert(this); } 

如果第一个例子,它会提醒Xservice的对象,但在第二个例子中它会提醒窗口对象。

我不知道除了在mootools的语法,但在mootoos你会打电话

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

,它会调用该方法正确

+0

Ahhhhh这个语句在poll函数中是我猜的罪魁祸首! – Alex 2009-09-18 20:41:09

+0

做CMS所说的工作将会解决绑定问题(使用匿名函数) – 2009-09-18 21:02:51