2011-07-07 67 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