2009-09-18 74 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