0

したがって、setInterval をオブジェクト プロパティとして保存したいと思います。なぜなら、すぐに開始するローテーターを説明するために「autoPlay」というフレーズをよく使用するからです。一連のスクリプトで「autoPlay」を複数回使用すると、それらをクリアしようとすると、どのスクリプトをクリアするかわからないため、JS がつまずきます。私の救済策は、「newsRotator.autoPlay」のようなオブジェクトを介してアクセスできるように、プロパティとしてどこかに置くことです。問題は、通常は次のように基本的な変数に配置されるため、その方法で保存する方法がわからないことです。

autoPlay = setInterval(this.forwardSlide, 5000);

これは、間隔をクリアできないオブジェクト プロパティとして格納しようとした私の試みの 1 つです。

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

これは実際にはobject constructorthisではないため、必要なスコープは作成されません。したがって、setTimeoutが呼び出されると、this参照しているオブジェクト プロパティを含まないウィンドウ オブジェクトを参照します...

次のようにオブジェクトを作成してみてください。

function NewsRotator() { ... }

次に、次のものをインスタンス化しますnew

var newsRotator = new NewsRotator();

次に、thisキーワードはその特定のインスタンスにスコープされます。

于 2012-06-18T20:40:05.390 に答える