-->

的setInterval仅在对象方法运行一次(setInterval only runs once

2019-09-21 03:17发布

下面是代码。


(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号的方法,但还需要调用第二方法。

Answer 1:

setInterval期望的功能。 this.func1是一个函数,但this.func1()是调用函数,它的结果是undefined (函数不返回任何东西)。 这是你的第一个误区。

第二个误解与范围有关。 如果调用setInterval(this.func1, 1000); 随后setInterval会调用正确的功能,但是this将不是指你的想法。 我没有现在的时间来解释,你一定要了解更多关于这一点。 在任何情况下,这将工作:

this.init = function() {
    var self = this;
    setInterval(function() { self.func1(); }, 1000);
};


Answer 2:

那是因为当你使用setInterval ,第一个参数必须是一个函数,一个参考:

setInterval(this.func1, 1000);

这是不带括号,因为this.func1()是指功能this.func1被执行。 而this.func1是功能,它可以作为一个参考使用的名称。



Answer 3:

带括号,你是调用方法,而不是将其设置为一个回调。

setInterval(this.func1(), 1000);

FUNC1不会的范围内执行this ,所以不会有机会获得FUNC2。 我有点生疏,但你应该能够使用()调用。 如果你需要从init和FUNC1,或者只是内FUNC1调用()我不记得。



文章来源: setInterval only runs once on object method