2011-07-07 93 views
1

許多人都知道,javascript delete關鍵字有點棘手(請參閱here)。是否有可能重新實施或修改它?我有一個對象被多次引用,我想先刪除所有的引用。像這樣:重新實現JavaScript刪除關鍵字

var oj = new OrangeJuice(); 
var juice = oj; 
var beverage = oj; 
var allRightSunnyD = oj; 
delete oj; //I want this to delete the actual object 

我不指望垃圾收集找到所有的引用,可以說,我知道那裏的引用,我只是想重新實現刪除也擺脫果汁,飲料和allRightSunnyD。我意識到我可以實現一個OrangeJuice.delete()函數,但我想知道是否有辦法做到這一點。就像在javascript刪除對象之前調用onDelete()回調函數一樣。

回答

7
  1. 刪除是一個關鍵字,所以它不應該被改變,即使你可以
  2. 刪除的刪除對象的屬性,所以你不能刪除任何包含在單變量

這裏看看對象如何在JavaScript中解釋垃圾收集:How does garbage collection work in JavaScript?

+0

我知道這是一個長遠的開始。快速的問題,如果我們有一個對象'oj'並設置它的屬性就像'oj.squeeze = true'那麼就像這樣引用'var squeeze = oj.squeeze'然後像這樣刪除它'delete oj.squeeze' ,現在變量'squeeze'指向什麼?如果不是將其設置爲true,而是將其設置爲不可變對象,如'[true]'? – puk

+1

好吧,這是問題的關鍵:擠壓仍然會指向「真實」,因爲除非沒有任何東西指向它,否則內存不能被釋放。這是因爲用var聲明變量很重要。否則,變量將在全局名稱空間中聲明並保留在整個運行時。 – Alex

+0

他們是否有理由不讓你選擇實際刪除對象?一些函數像'DELETE'或'_delete'。 – puk