0

同じページで複数回使用したいjavascriptクラスオブジェクトがありsetTimeout、バックグラウンドでチェックし続けるので機能する関数が必要です。ただし、このフィドルでわかるように、タイムアウト呼び出しでは、オブジェクトの最新のインスタンスのみを参照します。誰かが私がそれを分類する方法を知っていますか?できれば、jQueryではなくどのように実行されるかを確認したいと思います。正確にどのように実行されるかを理解したいと思います。

http://jsfiddle.net/cgoddard/yQDLe/20/

4

1 に答える 1

2

this.doDelayed二重にネストされた関数内に書き込む場合、キーワードはオブジェクトthisを参照しません。test代わりに、現在実行中の関数が呼び出されたオブジェクトを参照します。これはおそらくwindowです。

これを克服するには、関数thisの最初にを保存する必要があります。たとえば、次のようにし ます。次に、を使用してそのオブジェクトを参照できます。testvar $this = this;
$this

これに加えて、単純に書くとx = something、シンボルxwindowオブジェクトのプロパティ(「グローバル変数」とも呼ばれます)のように扱われます。したがって、あなたdoDelayedconstruct関数の両方がwindowオブジェクトに行き着きます。したがって、これを2回実行すると、両方が上書きされます。これが、同じ結果が2回得られる理由です。
代わりに、 (上から保存した値は$this.doDelayed = function() ...どこにありますか)と記述し、についても同様に行う必要があります。$thisthisconstruct

于 2012-10-03T00:12:29.660 に答える