2014-04-03 64 views
1

如何在函數中銷燬'this',以便從函數中銷燬函數的實例。如果這不是純粹的JavaScript可能。這是可能的原型?因此,像這樣:用Javascript銷燬'this'?

this = nil 

或類似的東西:

prototype.destroy(this) 

我不知道,如果原型或JavaScript有這樣的內置東西。有沒有我可以調用的函數會輕易地從實例外部銷燬實例?

感謝

+2

你應該更完整的代碼示例,以便我們理解「爲什麼」? –

+1

「this'究竟是什麼,你不能銷燬關鍵字,但你可能會根據它引用的內容銷燬引用。而'nil' < - 真的嗎? – adeneo

+1

http://stackoverflow.com/questions/2304860/can-an-object-automatically-delete-itself-in-javascript-once-it-has-achieved-its – Mosho

回答

2

你不能破壞的JavaScript this甚至試圖這樣做違背了事情是如何收集垃圾在JavaScript。另外,您無法在JavaScript中分配到this

你不會手動釋放JavaScript中的東西。相反,你清除所有對JavaScript中的對象的引用,並且當其他代碼沒有對JavaScript中的對象的引用時,那麼只有這樣垃圾回收器纔會釋放它。

由於javascript不允許您將指針指定給this指針,因此當您將某個函數設置爲特定對象時,您無法在該時刻以任何方式釋放該對象。您可以確保沒有其他對象具有對您的對象的引用,然後當此方法結束時,如果沒有其他對象具有對該對象的引用,則它將由垃圾回收器釋放。

垃圾收集系統中的內存管理與非垃圾收集語言完全不同。你不會自己解脫。您清除對事物的引用,以便GC可以稍後清理這些對象,除非沒有其他引用。

下面是一個例子。假設你有這樣的對象存儲在一個全局變量的屬性:

// declare global object and add property to it 
var myGlobalObject = {}; 
myGlobalObject.greeting = "Hello"; 

您從來都不是免費的全局變量明確,但如果你想它指向由垃圾收集器釋放的對象,那麼你只要清除參考對象:

myGlobalObject = null; 

然後,GC會看到有不再將具有與myGlobalObject用來指向並自該對象的對象的引用任何代碼已經無法訪問通過任何代碼,它將被GC釋放。