将setInterval存储为对象属性

时间:2012-06-18 20:33:27

标签: javascript jquery

所以我想将setInterval存储为对象属性,因为我经常喜欢使用短语“autoPlay”来描述立即启动的旋转器。当我在一系列脚本中不止一次使用“autoPlay”时,当我试图清除它时,我的JS会被绊倒,因为它不确定要清除哪一个。我的补救措施是把它作为属性放在某处,所以我可以通过一个对象来访问它,比如“newsRotator.autoPlay”。问题是,我不知道如何以这种方式存储它,因为它通常放在一个基本变量中,如下所示:

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()

1 个答案:

答案 0 :(得分:0)

这实际上不是object constructor,因此它不会创建您需要的this范围。因此,当调用setTimeout时,this引用窗口对象,该窗口对象不包含您引用的对象属性...

尝试按如下方式创建对象:

function NewsRotator() { ... }

然后用new实例化一个:

var newsRotator = new NewsRotator();

然后,this关键字的范围限定为该特定实例。