我怎样才能让这段代码工作?

问题描述 投票:0回答:3

我有下面的代码,但我无法调用 nextPromo,因为它不是一个函数。我怎样才能做到这一点?我正在尝试使用面向对象的风格设置旋转器。我是新手所以我很困惑。我尝试了很多东西,但我就是不知道,我对此感到非常沮丧,请帮助

function promoSlides(s){
    this.index = 0;
    this.prevIndex = 0;
    this.currentVeh = "";
    this.t;
    this.slides = s;
    this.len = this.slides.length;
    this.sortWeight = function(){
        ($('body').hasClass('en')) ? this.slides.sort(SortByWeight) : this.slides.sort(SortByWeightFr);
    };

    function SortByWeight(a,b) { return b.weight - a.weight; }
    function SortByWeightFr(a,b) { return a.frWeight - b.frWeight; }

    this.startTimer = function(){ this.t = setTimeout("this.nextPromo()", 3000); }

    this.nextPromo = function(){
       if(this.index > 0 || this.prevIndex > 0) $(this.slides[this.prevIndex].el).css("display","none");
       $(this.slides[this.index].el).css("display","block");
       this.prevIndex = this.index;
       this.index = (this.index < this.len-1) ? this.index+1 : 0;
       this.startTimer();
    }

    return true;
} ;
javascript
3个回答
0
投票

您正在为

this.nextPromo
分配一个函数,因此调用
this.nextPromo();
应该可以工作。


0
投票

实际上,

nextPromo
是一个函数。你可以这样称呼它:

this.nextPromo();

或者,如果这不起作用,您可以像普通函数一样调用它:

nextPromo();

参见 this jsFiddle 了解此类函数的示例。

希望这有帮助。


-1
投票

编辑:这是我测试过的一个简化示例。这使用 setInterval 定期推进幻灯片索引。 “下一个”功能包含在匿名函数中。

function promoSlides(s) {

    this.startTimer = function () {

        setInterval(
        function () {
            alert("called");

            //                if (this.index > 0 || this.prevIndex > 0) {
            //                    $(this.slides[this.prevIndex].el).css("display", "none");
            //                }

            //                $(this.slides[this.index].el).css("display", "block");
            //                this.prevIndex = this.index;
            //                this.index = (this.index < this.len - 1) ? this.index + 1 : 0;
        }, 3000


        );
    }

    return true;
};

var p = new promoSlides(null);
p.startTimer();
© www.soinside.com 2019 - 2024. All rights reserved.