2012-04-18 1 views
0

私はこのコードにアクセスできない/私は変更できないと言いましょう。無限のsetIntervalによって呼び出されるjavascript関数を変更/上書きするにはどうすればよいですか?

function f() { 
// bad tasks 
} 
setInterval(f, 10000); 

私は関数fを変更したいので、下にこのような記述をします。その中にbad tasks

window.f = function(){ 
// good tasks 
} 

しかし、本来の機能f()まだ10秒ごとに実行されています。 setIntervalに渡された関数のようなものは、依然として元の関数を指しています。 どうすれば停止できますか?

+0

あなたのように定義されて悪いcode_と何_functionてください: '関数f(){} 'var f = function(){}'ではなく? –

答えて

0

一つの方法:

function f() { 
    //bad tasks 
} 

setInterval(function() { f(); }, 10000); 

window.f = function() { 
    //good tasks 
} 

ようにタイマーが古いF(ない呼びます)に渡されたのではなく、現時点ではfをという名前の関数。

その他の方法:

function f() { 
    //bad tasks 
} 

var interval = setInterval(f, 10000); 

function g() { 
    //good tasks 
} 

clearInterval(interval); 
setInterval(g, 10000); 
+0

質問を見て、私はNoobが 'setInterval'部分を変更することはできないと思います。 – Yoshi

+0

@Yoshiが正しいです。私はsetInterval部分を変更することはできません。 – Noob

+0

あなたの最初の方法は動作しません(テスト済み)。 2番目の方法はNoobのために働くことができません。なぜなら私はアクセスできない/私は変更できませんし、Noobは古い間隔をクリアできないからです。 @AndrewD。 –

1

あなたの仮定が正しいです:間隔は元fへの参照を保持します。

元のスクリプトを編集することなくこれを変更する方法はありません。あなたができることは、サイト上のすべての区間をクリアし、別の区間を開始することだけです。それについてはhttps://stackoverflow.com/a/8860203/27862を参照してください。

0

setIntervalを使用しないでください。代わりにsetTimeoutを使用してください。それはあなたに必要なコントロールを与えるでしょう。

function f() { 
// bad tasks 
fTimeout = setTimeout(f,1000); 
} 
//start 
var fTimeout = setTimeout(f,1000); 

悪い何かが起こっているとあなたがfを書き換えたい場合:

clearTimeout(fTimeout); 
window.f = function() { 
      /* good stuff */ 
      fTimeout = setTimeout(f,1000); 
      } 
fTimeout = setTimeout(f,1000); 

See also

関連する問題