2010-08-31 68 views
1
var focus = true; 

function z() { 
    this.t = 0; 
    this.p = function (t) { 
     if (focus == true) { 
      this.t = t; 
      alert(this.t); 

     } 

    } 
} 
var zp = new z(); 
setTimeout('zp.p(0)', 100); 
window.setInterval('zp.p(1)', 2000); 
var ftimer = setTimeout('focus=false', 2000); 

document.addEventListener('mousemove', function (e) { 
    clearTimeout(ftimer); 
    focus = true; 
    ftimer = setTimeout('focus=false', 2000); 
}, false); 

我有這段代碼。但由於某種原因,即使連續移動鼠標,它也只會提醒兩次。我一直在研究這個問題,並且正在調查螢火蟲,當我移動我的鼠標時,重點是真實的。我一直想弄清楚發生了什麼......即使我這樣做:即使我這樣做:javascript setInterval對象的函數只能調用2x

function z() { 
    this.t = 0; 
    this.p = function (t) { 
     if (focus == true) { 
      this.t = t; 

     } 
     alert(this.t); 

    } 
} 

它仍然只警報兩次。

我曾嘗試使用循環setTimeout函數,但也不工作。這讓我瘋狂。

+0

它似乎不斷警告我。 – palswim 2010-08-31 16:03:16

+1

你想做什麼?它總是向我發出警告,似乎沒有任何特別的用處。在'setTimeout'中使用字符串也會使用'eval'這個邪惡的東西,在這種情況下使用匿名函數。你應該告訴我們這是什麼預期的效果,或者重構你的代碼來表明它。因爲誰知道'z'是什麼。 – 2010-08-31 16:14:29

回答

0

很好,你找到了你的錯誤。

我會使用更多的比特的功能-AS-一流的對象和更少eval邏輯編寫代碼:

var focus = true; 
function z() { 
    var that = this; // we won't always have the correct value of "this" 
    this.focus = true; 
    this.t = 0; 
    this.p = function (t) { 
     if (that.focus == true) { 
      that.t = t; 
      alert(t); 
     } 
    } 
    this.fade = (function(obj){ return function(){ obj.focus = false; } })(this); // Using self-invokation 
} 
var zp = new z(); 
setTimeout(zp.p, 100, 0); 
window.setInterval(zp.p, 2000, 1); 
var ftimer = setTimeout(zp.fade, 2000); 
document.addEventListener('mousemove', function (e) { 
    clearTimeout(ftimer); 
    zp.focus = true; 
    ftimer = setTimeout(zp.fade, 2000); 
}, false); 

我用線路10a self-invoking function(function(obj){ return function(){...} })(this);,和set this to a different variable

+0

感謝您的支持!對此,我真的非常感激。 – DantheMan 2010-08-31 17:42:00

0

我發現它只是和firefox相關,而且firefox在一行代碼中窒息,所以這就是爲什麼它不會運行。所以我解決了這個問題,現在一切都很好。

+0

你的代碼肯定是次優的,如果你說出你實際上正在做的事情,人們可以(也可能會)想出一個更好的版本。 – Tomalak 2010-08-31 16:21:12

相關問題