2011-12-21 89 views
3

我想有一個名爲MyObj中 OBJ,它有一個功能測試獲取函數的對象中的JavaScript

MyObj.prototype.test = function(){ 
    alert(this); 
} 

我設置定時器:

setInteravl(myObj.test,1000); 

由於這完全取決於如何調用函數,這是指警告語句中的窗口而不是myObj

如果我需要myObj參考嗎?

回答

4

包裝在一個匿名函數:

var myObj = new MyObj(); 

setInterval(function() {myObj.test();}, 1000); 

用現代的實現,bind它。

var myObj = new MyObj(); 

setInterval(myObj.test.bind(myObj), 1000); 
+1

需要注意的是,除了解決'this'問題,您的包裹函數調用的匿名函數提供了一種參數傳遞給你的函數(因爲'setInterval'和'setTimeout'顯然不知道你函數參數的任何內容)。 – nnnnnn 2011-12-21 01:59:43

+0

@nnnnnn:非常真實值得注意。 – 2011-12-21 02:01:29

1

您可以在function包裝它:

setInteravl(function() {myObj.test()} ,1000);