2012-06-18 68 views
0

所以我想將setInterval作爲對象屬性存儲,因爲我經常使用短語「autoPlay」來描述立即啓動的旋轉器。當我在一系列腳本中多次使用「autoPlay」時,當我試圖清除它們時,我的JS會被絆倒,因爲它不知道要清除哪一個。我的補救措施是把它放在某個地方作爲一個屬性,所以我可以通過一個對象來訪問它,比如「newsRotator.autoPlay」。問題是,我不知道如何存儲這樣的說法,因爲它通常被放置在一個基本的變量,像這樣:將setInterval存儲爲對象屬性

autoPlay = setInterval(this.forwardSlide, 5000); 

這是一個例子我嘗試之一,在把它作爲一個對象的屬性,從而未能清除的時間間隔:

var newsRotator = { 
    run: function() { 
     $('.arrow').on('click', function (e) { 
      e.preventDefault(); 
      clearInterval(newsRotator.autoPlay); 
      if ($(this).hasClass('back')) { 
       newsRotator.backSlide(); 
      } else { 
       newsRotator.forwardSlide(); 
      } 
     }); 
    }, 
    backSlide: function() { 
     (goes back one slide) 
    }, 
    forwardSlide: function() { 
     (goes forwardone slide) 
    }, 
    autoPlay: setInterval(this.forwardSlide, 5000), 
    init: function() { 
     this.run(); 
    } 
} 

newsRotator.init() 

回答

0

這並不是一個真正的object constructor,所以它不會產生您需要的this作用域。因此,當setTimeout被調用時,this指窗口對象,它不包含你引用對象屬性...

嘗試創建對象如下:

function NewsRotator() { ... }

然後實例化一個與new

var newsRotator = new NewsRotator();

然後,this關鍵字被限定於該特定實例。

相關問題