2015-02-04 126 views
0
function ConstructMe(msg) { 
    this.message = msg; 
} 

instances = { 
    instance1: new ConstructMe('msg1'), 
    instance2: new ConstructMe('msg2'), 
    instance3: new ConstructMe('msg3'), 
    instance4: new ConstructMe('msg4'), 
    instance5: new ConstructMe('msg5') 
} 

如果我有這個構造函數,並且我在一個對象中構建了它的實例(如上所示),那麼以後如何去銷燬它們呢? 我想確保它們不再可用,也確保它們不再無用。銷燬構造函數實例

會刪除對象的工作?或者這些實例只會留在內存無名的地方?

在我的情況,我在一個應用程序創建沿着特定的動作很多情況下,我想確保我保持內存清潔,不要把事情四處張望,混亂......

期待您的反饋

+0

簡短的回答是,一旦沒有更多的引用存在,對象就會從內存中釋放出來。是否存在對它的引用取決於你的代碼(以及你的代碼使用的其他人的代碼)。 [本MDN文章](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management)是瞭解它如何工作的一個起點。是的,你應該閱讀整件事情。 –

回答

3

JavaScript不能這樣工作。這是一種garbage collected語言。從技術上講,你可以這樣做:

delete instances.instance3; 

應該從instances對象中刪除屬性,但實際上,你很少需要擔心。你的JavaScript運行時會照顧清理你*

*從技術上講,你仍然可以在javascript中創建內存泄漏,但在絕大多數情況下,你不需要擔心它。

+0

很好解釋,謝謝! – CatalinBerta

1

JavaScript內存管理的核心概念是可達性概念。

  • 一組不同的對象被認爲是可達的:這些被稱爲根。通常,這些包括調用堆棧中任何地方引用的所有對象(即當前正在調用的函數中的所有局部變量和參數)以及任何全局變量。

  • 對象保存在內存中,而它們可以通過引用或參考鏈從根訪問。

  • 有其清除由不可達的對象佔用的內存瀏覽器中的垃圾收集器

所以你的情況,如果您的實例對象將是不可到達的任何更多的垃圾收集器會自動刪除該對象,你不需要刪除它們你自己或在大多數情況下做任何內存管理