簡體   English   中英

如何修改/覆蓋由無限setInterval調用的javascript函數?

[英]How do I modify/overwrite a javascript function that is called by an infinite setInterval?

可以說我們有此代碼,我無法訪問/無法更改。

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

我想修改函數f,所以我在下面寫了類似的東西。

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

但是其中包含bad tasks的原始函數f()仍然每10秒運行一次。 似乎傳遞給setInterval的函數仍指向原始函數。 如何停止?

您的假設是正確的:該間隔保留了對原始f的引用。

如果不編輯原始腳本,則無法更改此設置。 您所能做的就是清除站點上的所有間隔並開始另一個間隔。 請參閱https://stackoverflow.com/a/8860203/27862

單程:

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);

不要使用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);

也可以看看

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM