调用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();
答案 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”关键字,但这意味着在不同的上下文中会有其他内容。