试图在函数内调用方法

时间:2014-04-06 22:39:57

标签: javascript jquery

调用stop()方法时,我得到test is not defined

http://jsfiddle.net/n4mKw/1766/

<span id="rotator"></span>

var rotate = {
    quoteIndex: -1,
    duration: 500,
    delay: 3000,
    play: true,
    quotes: [],
    init: function (quotes) {
        this.quotes = quotes;
        this.showNextQuote();
    },
    showNextQuote: function () {
        this.quoteIndex = (this.quoteIndex + 1) % this.quotes.length;
        if (this.play) {
            $("#rotator").html(this.quotes[this.quoteIndex])
                .fadeIn(this.duration)
                .delay(this.delay)
            .fadeOut(this.duration, this.showNextQuote.bind(this));
        }
    },
    stop: function () {
        this.play = false;
    }



};

var test = rotate.init(["example1", "example2", "example3"]);
test.stop();

3 个答案:

答案 0 :(得分:1)

您可能需要rotate.stop()test不是rotate的实例,因为init不会返回该对象,也不会返回任何内容。

答案 1 :(得分:1)

您的函数不会返回旋转对象的实例作为指定的上一个答案。但是,您可以通过将对象的实例返回到测试变量来解决此问题。

var rotate = {
    quoteIndex: -1,
    duration: 500,
    delay: 3000,
    play: true,
    quotes: [],
    init: function (quotes) {
        this.quotes = quotes;
        this.showNextQuote();
        return this;
    },
    showNextQuote: function () {
        this.quoteIndex = (this.quoteIndex + 1) % this.quotes.length;
        if (this.play) {
            $("#rotator").html(this.quotes[this.quoteIndex])
                .fadeIn(this.duration)
                .delay(this.delay)
            .fadeOut(this.duration, this.showNextQuote.bind(this));
        }
        return this;
    },
    stop: function () {
        this.play = false;
        return this;
    }



};

var test = rotate.init(["example1", "example2", "example3"]);
test.stop();

我已更新代码以返回函数中的对象。请在小提琴中测试。

答案 2 :(得分:1)

每个JavaScript函数都会返回一些内容,如果你没有指定返回值,它默认会返回undefined。您当前正在做的是将未定义的值分配给test并调用无效的stop()。如果您尝试链接对象,只需从init函数返回。

var rotate = {
  quoteIndex: -1,
  duration: 500,
  delay: 3000,
  play: true,
  quotes: [],
  init:function()
  {
     this.quotes = quotes;
     this.showNextQuote();
     return this;
  },
  showNextQuote: function () {
    //showNextQuote stuff.....
  },
  stop:function(){
     this.play = false;
  }

}

请注意你如何使用“this”关键字,但这意味着在不同的上下文中会有其他内容。