删除方法本身 - 它有效,但为什么,我应该使用它?
好吧,这是出于“学术兴趣”(尽管我想在某个地方使用它)。假设我有以下内容:删除方法本身 - 它有效,但为什么,我应该使用它?
function f2()
{
delete Widget.f1;
Widget.f3 = function()
{
console.log("This works.");
}
}
let Widget =
{
f1: function()
{
f2();
}
}
console.log(Widget);
Widget.f1();
console.log(Widget);
Widget.f3();
所以基本上我调用一个方法从对象中删除自己,并用另一种方法替换。它似乎工作正常。所以这里是我的两个问题:
是否有一个很好的(技术)原因为什么我不应该这样做?
从一个“在JavaScript中”的角度来看,这是如何工作的?直觉会说f1在完成之前一直保持“打开”状态,这意味着我们删除了一个仍然“打开”的函数。 f2()调用以某种方式“悬挂”出来了吗?
干杯
是否有一个良好的(技术)原因,我不应该这样做呢?
主要的原因我不会用这个,这是混乱,容易造成错误当其他开发者(包括未来的BVDev)要么不注意到你正在做的,还是不明白你为什么这样做。
从“在JavaScript中”的角度来看,这是如何工作的?
Widget.f1
是对函数的引用,它不是函数本身。所以当你delete Widget.f1
时,那个引用现在已经消失了,但是函数在内存中仍然存在。它也继续存在于当前的执行堆栈中。如果还有其他的函数引用,那么在调用堆栈结束后它将继续存在。另一方面,如果这是该函数的唯一引用,那么在一段时间后,垃圾收集器将运行并释放该函数占用的内存。
很酷,谢谢。我没有考虑将函数引用的副本“在那里”的可能性。我会寻找另一种方式。 – BVDev
您在执行时不会删除函数('Widget.f1')。正在执行的函数是'f2'。因此,'f2'可以很好地删除'Widget.f1'。 –
这是删除对象属性'f1'而不是函数。 – MinusFour