3

これがコードです。

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

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

        this.func1 = 関数() {
            console.log('func1');
            this.func2();
        };

        this.func2 = 関数() {
            console.log('func2');
            //いくつかのコード
        };

        this.init(); を返します。
    }
})(jQuery);

*括弧を使用すると、1 番目と 2 番目のメソッドが実行されますが、1 番目のメソッドは 1 回だけ呼び出されます。

*括弧を使用しない場合、最初のメソッドは間隔内で問題なく実行されますが、2番目のメソッドは呼び出されません/呼び出されませんでした。

何を持って行けばいいですか?括弧の有無?間隔で最初のメソッドを実行する必要がありますが、2 番目のメソッドも呼び出す必要があります。

4

3 に答える 3

3

を使用する場合setInterval、最初の引数は関数への参照でなければならないためです。

setInterval(this.func1, 1000);

this.func1()関数this.func1が実行されることを意味するため、括弧なしです。Andthis.func1は、参照として使用できる関数の名前です。

于 2012-08-12T15:05:29.573 に答える
2

setInterval関数を期待します。this.func1は関数ですが、関数this.func1()を呼び出した結果ですundefined(関数は何も返しません)。これはあなたの最初の誤解です。

2 つ目の誤解は、スコープに関するものです。呼び出すと、正しい関数が呼び出されますが、setInterval(this.func1, 1000);あなたの考えは参照されません。今は説明する時間がありません。これについてもっと読む必要があります。いずれにせよ、これは機能します:setIntervalthis

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 に答える