重新实现javascript删除关键字

重新实现javascript删除关键字,javascript,extend,Javascript,Extend,很多人都知道,javascript delete关键字使用起来有点棘手。是否可以重新实施或修改它?我有一个对象被多次引用,我想先删除所有引用。像这样: var oj = new OrangeJuice(); var juice = oj; var beverage = oj; var allRightSunnyD = oj; delete oj; //I want this to delete the actual object 我不希望垃圾收集器找到所有的引用,比如说我知道引用在哪里,我只想

很多人都知道,javascript delete关键字使用起来有点棘手。是否可以重新实施或修改它?我有一个对象被多次引用,我想先删除所有引用。像这样:

var oj = new OrangeJuice();
var juice = oj;
var beverage = oj;
var allRightSunnyD = oj;
delete oj; //I want this to delete the actual object
我不希望垃圾收集器找到所有的引用,比如说我知道引用在哪里,我只想重新实现delete,同时去掉juice、饮料和allRightSunnyD。我意识到我可以实现一个OrangeJuice.delete函数,但我想知道是否有一种正确的方法。就像javascript在删除对象之前调用onDelete回调函数一样

delete是一个关键字,所以即使可以,也不应该修改它 删除用于删除对象的属性,因此不能删除包含在单个变量中的对象 请看下面如何解释Javascript中的垃圾收集:

delete是一个关键字,所以即使可以,也不应该修改它 删除用于删除对象的属性,因此不能删除包含在单个变量中的对象
看看Javascript中的垃圾收集是如何解释的:

我知道一开始就很难做到。快速提问,如果我们有一个对象oj,并设置它的一个属性,如so oj.squence=true,然后引用它,如so var squence=oj.squence,然后删除它,如so delete oj.squence,那么变量squence现在指向什么?如果我们没有将它设置为true,而是将它设置为一个不可变的对象,比如[true]?那么这就是问题的关键:挤压仍然会指向true,因为除非没有任何东西指向它,否则内存无法释放。这是因为用var声明变量很重要。否则,变量将在全局名称空间中声明,并在整个运行时保持在该名称空间中。是否有理由不让您选择实际删除该对象?一些函数,比如DELETE或_DELETE。由于您可以迭代Javascript属性,删除它们可能会很有用,但我从来没有实际使用过它。如果释放内存,其他对象或变量将指向它们不应指向的地方,或者被指定为null-这会导致错误,处理它们比看起来更困难,特别是在大型程序中,您可能看不到谁实际删除了您所指向的对象。如果一个程序被禁止访问某些对象,它必须通过释放内存以外的其他方式进行检查。最重要的是:如果一个对象的所有引用都被删除,那么你就可以删除它。只有这样,才有可能将其从内存中删除。但事实上,我很高兴我没有被迫处理这件事。我要么尽量避免在全局名称空间中保留不必要的对象,好的Javascript实现应该自己处理其余的事情。快速提问,如果我们有一个对象oj,并设置它的一个属性,如so oj.squence=true,然后引用它,如so var squence=oj.squence,然后删除它,如so delete oj.squence,那么变量squence现在指向什么?如果我们没有将它设置为true,而是将它设置为一个不可变的对象,比如[true]?那么这就是问题的关键:挤压仍然会指向true,因为除非没有任何东西指向它,否则内存无法释放。这是因为用var声明变量很重要。否则,变量将在全局名称空间中声明,并在整个运行时保持在该名称空间中。是否有理由不让您选择实际删除该对象?一些函数,比如DELETE或_DELETE。由于您可以迭代Javascript属性,删除它们可能会很有用,但我从来没有实际使用过它。如果释放内存,其他对象或变量将指向它们不应指向的地方,或者被指定为null-这会导致错误,处理它们比看起来更困难,特别是在大型程序中,您可能看不到谁实际删除了您所指向的对象。如果一个程序被禁止访问某些对象,它必须通过释放内存以外的其他方式进行检查。最重要的是:如果一个对象的所有引用都被删除,那么你就可以删除它。只有这样,才有可能将其从内存中删除。但事实上,我很高兴我没有被迫处理这件事。我要么尽量避免在全局名称空间中不必要地保留对象,而好的Javascript实现应该自己处理其余的事情。