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()
回调函数一样。
我知道这是一个长远的开始。快速的问题,如果我们有一个对象'oj'并设置它的属性就像'oj.squeeze = true'那么就像这样引用'var squeeze = oj.squeeze'然后像这样删除它'delete oj.squeeze' ,现在变量'squeeze'指向什么?如果不是将其设置为true,而是将其设置为不可变对象,如'[true]'? – puk
好吧,这是问题的关键:挤压仍然会指向“真实”,因为除非没有任何东西指向它,否则内存不能被释放。这是因为用var声明变量很重要。否则,变量将在全局名称空间中声明并保留在整个运行时。 – Alex
他们是否有理由不让你选择实际删除对象?一些函数像'DELETE'或'_delete'。 – puk