2009-12-26 61 views
0
function Something() { 
    this.var1 = 0; 
    this.var2 = 2; 
    this.mytimer; 
    this.getCars=function() { 
    //some code 
    }; 
    this.start = function(l) { 
    this.updateTimer=setInterval("this.getCars();" , 5000); 
    }; 
} 

var smth = new Something(); 
smth.start(); 

當我鍵入this.getCars()時,它不起作用。如果該函數是全局聲明的,並且我放入了例如getCars它就可以工作。 我不知道如何解決這個問題,因爲setInterval成爲一個String參數。如何設置使用settimer從當前對象調用函數

有人可以幫我把這個?

回答

1
var me = this 
setInterval(function() {me.getCars()}, 5000) 

,如果你碰巧使用prototype,你也可以使用得心應手bind方法:

setInterval(this.getCars.bind(this), 5000) 
+0

我正在使用JQuery。你能更具體地說明你是如何使用綁定方法的? – Max 2009-12-27 00:22:51

+0

綁定是可選的,基本上只是一種替代方法... – jspcal 2009-12-27 00:30:31

+0

我不相信jQuery有一個「綁定」等價物。 – 2009-12-27 07:09:20

0

試試這個:

function Something() { 
    this.var1 = 0; 
    this.var2 = 2; 
    this.mytimer; 
    var me = this; 
    this.getCars = function() { 
    console.log(me.var2); 
    }; 
    this.start = function(l) { 
    me.updateTimer = setInterval(me.getCars, 1000); 
    } 
} 

var smth = new Something(); 
smth.start(); 

console.log()位的Firefox/Firebug的。如果你不使用它,將其替換爲其他東西(儘管我強烈建議使用它進行開發)。

基本上問題是,當你調用一個函數,甚至一個對象的方法,你調用它的方式決定了this的值。有關更多詳細信息,請參見Method binding。所以你要做的就是修正this的值,正如我在上面的例子中所做的(對於方法)。

+1

實際上,因爲在調用setInterval時,this.getCars被解析爲函數引用,所以setInterval(this.getCars,1000)也可以正常工作。問題是在getCars方法中使用'this'。這就是使用'me'var真正有用的地方。 – slebetman 2009-12-27 00:25:42

相關問題