面向对象的Javascript错误对象不是函数
我试图创建一个简单的字幕,只是在间隔中改变。我只是想理解Javascript中的对象。当前,我收到错误,面向对象的Javascript错误对象不是函数,javascript,jquery,oop,object,javascript-objects,Javascript,Jquery,Oop,Object,Javascript Objects,我试图创建一个简单的字幕,只是在间隔中改变。我只是想理解Javascript中的对象。当前,我收到错误,对象不是函数 var marquee = { domElement: jQuery( 'span' ), titles: [ 'First', 'Second', 'Third', 'Fourth' ], current: '', next: 0, _getCurrent
对象不是函数
var marquee = {
domElement: jQuery( 'span' ),
titles: [ 'First', 'Second', 'Third', 'Fourth' ],
current: '',
next: 0,
_getCurrent: function(){
this.current = this.domElement.text();
},
_setNext: function(){
this.next = this.titles.indexOf( this.current ) + 1;
},
changeHeading: function(){
this._getCurrent();
this._setNext();
this.domElement.text( this.titles[ this.next ] );
}
};
var marqueeInterval = setInterval( marquee.changeHeading, 700 );
如果您能帮我解释为什么我不能让它工作,我们将不胜感激。我不熟悉面向对象的Javascript,我只是想理解一下。谢谢 由于您将marquee.changeHeading
作为setInterval()方法的回调传递,因此调用该方法时,执行上下文将不会是marquee
对象
您可以使用如下所示的
var marqueeInterval = setInterval( marquee.changeHeading.bind(marquee), 700 );
或者调用目标方法的自定义回调,如
var marqueeInterval = setInterval( function(){
marquee.changeHeading();
}, 700 );
由于将marquee.changeHeading
作为setInterval()方法的回调传递,因此调用该方法时,执行上下文将不会是marquee
对象
您可以使用如下所示的
var marqueeInterval = setInterval( marquee.changeHeading.bind(marquee), 700 );
或者调用目标方法的自定义回调,如
var marqueeInterval = setInterval( function(){
marquee.changeHeading();
}, 700 );
通过将changeHeading
的函数引用传递给setInterval
,每次调用都会丢失上下文。您可以通过添加一个附加函数(如
setInterval(function() {
marquee.changeHeading();
}, 700);
或者调用函数.prototype.bind
var marqueeInterval = setInterval( marquee.changeHeading.bind( marquee ), 700 );
通过将changeHeading
的函数引用传递给setInterval
,每次调用都会丢失上下文。您可以通过添加一个附加函数(如
setInterval(function() {
marquee.changeHeading();
}, 700);
或者调用函数.prototype.bind
var marqueeInterval = setInterval( marquee.changeHeading.bind( marquee ), 700 );
因为您使用的是jQuery,所以运行代码的最简单方法是将最后一行替换为下面的一行
var marqueeInterval = window.setInterval($.proxy(marquee.changeHeading, marquee), 700);
因为您使用的是jQuery,所以运行代码的最简单方法是将最后一行替换为下面的一行
var marqueeInterval = window.setInterval($.proxy(marquee.changeHeading, marquee), 700);
明亮的所以基本上,“this”在传递给setInterval时不再指marquee了?我理解对了吗?太棒了!所以基本上,“this”在传递给setInterval时不再指marquee了?我理解正确吗?