2010-02-04 73 views
3

如果你能向我解釋爲什麼shout()一直被調用,儘管它被認爲「消失」了,我會很高興。Javascript函數不斷被調用,雖然它的類是空的

var myclass = new Class({ 
myid: "greatidea", 
initialize: function(element) { 
    var shout = function() { alert(this.myid); }; 
    shout.periodical(5000, this); // test debug 
} 

});
x = new myclass();
alert(x);
x=null;
alert(x);

也看到這裏http://mootools.net/shell/jhCBz/

基本上,我的想法:函數都有自己的註冊,現在是獨立誰把它稱爲對象。但我很樂意得到一個真實的解釋。
謝謝。

回答

1

x持有對myclass的引用。 myclass正在執行shout。當您將x設置爲null時,您剛剛擺脫了對myclass的引用,而不是myclass對象本身。

+0

非常感謝@jball。是否有另一種方法來停止函數調用(除了清除定時器)? – Nir 2010-02-04 19:12:08

+1

不,調用'$ clear'是我知道的唯一方法。 – jball 2010-02-04 19:48:34

+0

是的,即使定期參考是類的屬性,它也會失敗:http://mootools.net/shell/ZBrm7/1/ 即使您刪除類本身,它也會繼續。非常討厭 - 但你可能必須編寫一個.destroy()方法,其中$ clear(this.timer); – 2010-02-05 10:50:02

6

功能是總是獨立。只要有一個函數的引用,它就會繼續存在。在這種情況下,你的對象也是這樣,因爲你已經通過了一個對它的引用(通過this)到periodical()函數,該函數持有它的上下文。

相關問題