我想知道如何正確「清除」一個對象實例。 使用下面的代碼,內部setInterval()即使在父實例被「清除」之後仍將繼續運行。如何在javascript中刪除/清除/忘記對象實例?
// simple Class
var aClass = function(){
return {
init: function(){
console.log("aClass init()")
setInterval(this.tick, 1000);
// note: we're not storing the ref
},
tick: function(){
console.log("aClass tick");
}
}
}
// instantiate the class
var inst = new aClass();
inst.init();
// try to forget the instance
function test(){
console.log("test() 1 inst:", inst);
inst = null;
console.log("test() 2 inst:", inst);
}
// run for a while, then call test()
setTimeout(test, 4000);
輸出:
aClass init()
aClass tick
aClass tick
aClass tick
test() 1 inst: {.....}
test() 2 inst: null
aClass tick
aClass tick ...
問題是, 「ACLASS嘀」 消息繼續試驗後打印()。
想法?
'setInterval'及其處理程序無關,與你的對象。 – VisioN
@VisioN - OP的觀點是,如果對象的引用保持在閉包中,則該對象不會真的被「刪除」。 – nrabinowitz
該對象被刪除,inst在第二個控制檯日誌中爲空。當用作setInterval的參數時,函數節點被複制。 – HMR