0

所以我想将 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()
4

1 回答 1

0

这实际上不是一个对象构造函数,因此它不会创建this您需要的范围。因此,当setTimeout被调用时,this指的是窗口对象,它不包含您正在引用的对象属性......

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

function NewsRotator() { ... }

然后实例化一个new

var newsRotator = new NewsRotator();

然后,this关键字的作用域是该特定实例。

于 2012-06-18T20:40:05.390 回答