下面是代码。
(function($){
$.fn.testfunc = function() {
this.init = function() {
setInterval(this.func1(), 1000);
};
this.func1 = function() {
console.log('func1');
this.func2();
};
this.func2 = function() {
console.log('func2');
//some codes
};
return this.init();
}
})(jQuery);
*当我用括号中的第1和第2个方法运行但是第方法被调用一次。
*当我不使用括号内的第一个方法间隔就好了运行,但它不会/不能称之为第二方法。
我应该怎么去? 随着括号或不? 我需要运行在区间1号的方法,但还需要调用第二方法。
setInterval
期望的功能。 this.func1
是一个函数,但this.func1()
是调用函数,它的结果是undefined
(函数不返回任何东西)。 这是你的第一个误区。
第二个误解与范围有关。 如果调用setInterval(this.func1, 1000);
随后setInterval
会调用正确的功能,但是this
将不是指你的想法。 我没有现在的时间来解释,你一定要了解更多关于这一点。 在任何情况下,这将工作:
this.init = function() {
var self = this;
setInterval(function() { self.func1(); }, 1000);
};
那是因为当你使用setInterval
,第一个参数必须是一个函数,一个参考:
setInterval(this.func1, 1000);
这是不带括号,因为this.func1()
是指功能this.func1
被执行。 而this.func1
是功能,它可以作为一个参考使用的名称。
带括号,你是调用方法,而不是将其设置为一个回调。
setInterval(this.func1(), 1000);
FUNC1不会的范围内执行this
,所以不会有机会获得FUNC2。 我有点生疏,但你应该能够使用()调用。 如果你需要从init和FUNC1,或者只是内FUNC1调用()我不记得。