3

这是代码。

(函数($){
    $.fn.testfunc = 函数() {

        this.init = 函数() {
            setInterval(this.func1(), 1000);
        };

        this.func1 = 函数() {
            控制台.log('func1');
            this.func2();
        };

        this.func2 = 函数() {
            控制台.log('func2');
            //一些代码
        };

        返回 this.init();
    }
})(jQuery);

*当我使用括号时,第一个和第二个方法运行但第一个方法只调用一次。

*当我不使用括号时,第一种方法在间隔中运行得很好,但它不能/不能调用第二种方法。

我应该带什么去?带括号还是不带括号?我需要在间隔内运行第一种方法,但也需要调用第二种方法。

4

3 回答 3

3

那是因为当您使用 时setInterval,第一个参数必须是对函数的引用:

setInterval(this.func1, 1000);

它没有括号,因为this.func1()表示该函数this.func1已执行。是函数的名称,this.func1可以作为参考。

于 2012-08-12T15:05:29.573 回答
2

setInterval期望一个函数。this.func1是一个函数,但是this.func1()是调用函数的结果,即undefined(函数不返回任何内容)。这是你的第一个误解。

第二个误解与范围有关。如果您调用setInterval(this.func1, 1000);thensetInterval将调用正确的函数,但this不会引用您的想法。我现在没有时间解释,您绝对应该阅读更多有关此的内容。无论如何,这将起作用:

this.init = function() {
    var self = this;
    setInterval(function() { self.func1(); }, 1000);
};
于 2012-08-12T15:08:34.267 回答
0

使用括号,您正在调用该方法,而不是将其设置为回调。

setInterval(this.func1(), 1000);

func1 不会在 的范围内执行this,因此它无法访问 func2。我有点生疏了,但你应该可以使用 call()。我不记得您是否需要从 init 和 func1 或仅在 func1 中调用()。

于 2012-08-12T15:11:28.863 回答