2011-07-06 46 views
3

我寫在JavaScript中的一類,看起來像這樣:的JavaScript的setInterval()的範圍問題

function main() 
{ 
    this.var1 =0; 
    this.clock = function() 
    { 
     var t = this; 
     var n =1; 
     window.setInterval(document.write(this.n++),1000); 
    } 
} 

但調用的setInterval()後 '這' 指的窗口。所以我不能訪問類中的變量。我怎樣才能解決這個範圍問題?

回答

5
function main() 
{ 
    this.var1 =0; 
    this.clock = function() 
    { 
     var t = this; 
     var n = 1; 
     window.setInterval(function(){ document.write(n++); },1000); 
    } 
} 

請注意,您的代碼被包裝在function中。

0

document.write ....現在這是舊學校。請嘗試使用document.write(main.n++)

+0

如果我這樣做,主體的哪個對象將被緩衝? –

2

首先,你的setInterval沒有做你的想法。您正在對document.write(this.n++)結果執行setInterval。寫入立即發生,並且只會觸發一次。

代碼應該是:

setInterval(function(){ 
    document.write(n++); 
}, 1000); 

的setInterval需要一個函數來執行每n毫秒。該函數的範圍訪問您的n變量,所以你並不需要一個this

+0

但我沒有得到所需的輸出,當我通過同一班的方法,就像你建議 –

+0

我不關注。你能舉一個例子嗎? –

1
function main() 
{ 
    this.var1 =0; 
    this.clock = function() 
    { 
     var t = this; 
     var n = 1; 
     window.setInterval(function(){ document.write(t.n++); },1000); 
    } 
} 

你已經宣佈t,使用它!所有人都是正確的,使用函數聲明,但要保持範圍使用tn