2012-09-06 100 views
0

我有一個函數內設置一個時間間隔調用另一個函數,但是當這個時間間隔函數被調用它會給我一個錯誤說,未捕獲TypeError:Object [object Window]沒有方法無法獲取setInterval函數調用另一個函數在JavaScript中使用this.function_name

這裏是我想要了解的代碼。

function test2() { 
this.timer; 

this.say = function(){ 
    console.log("hi"); 
} 

this.start = function() { 
    //starts the interval function 
    this.timer = setInterval(this.loop, 1000) 
} 

this.loop = function() { 
    //runs every 1 second 
    this.say(); //gives error -- Uncaught TypeError: Object [object Window] has no method 'say' 
} 
} 

var test = new test2(); 
test.start(); 

謝謝你的幫助!

+0

http://stackoverflow.com/questions/2749244/javascript-setinterval-and-this-solution – Michal

回答

2

setInterval()觸發時,上下文是全局上下文(例如窗口),而不是您的對象。打電話給你的對象的方法,並有this在方法調用適當的設定值,則需要一個獨立的空間,您可以調用該方法的實際對象是這樣的:

this.start = function() { 
    //starts the interval function 
    var self = this; 
    this.timer = setInterval(function() { 
     self.loop(); 
    }, 1000) 
} 

僅供參考,這是非常在使用異步函數(如定時器或ajax)將上下文this保存到局部變量中時很常見,因此即使this在回調函數中不同(如您的示例中),也可以從嵌入的回調函數引用它。這是一種常見的設計模式。

+0

這正是我想念失蹤謝謝 – Justin

相關問題