2012-06-18 43 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关键字被限定于该特定实例。

相关问题