我该如何使这段代码工作?

时间:2011-11-23 04:10:19

标签: javascript object

我有下面的代码,但我不能调用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;
} ;

3 个答案:

答案 0 :(得分:1)

实际上,nextPromo是一个功能。你可以这样称呼它:

this.nextPromo();

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

nextPromo();

有关此类功能的示例,请参阅this jsFiddle

希望这有帮助。

答案 1 :(得分:0)

您正在为this.nextPromo分配一个功能,因此调用this.nextPromo();应该有效。

答案 2 :(得分:0)

编辑:这是我测试过的一个简化示例。这使用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();