【发布时间】:2016-01-03 12:39:57
【问题描述】:
我做了一个small javascript framework,旨在在原型对象模型中添加一些有用的东西(超级方法调用、继承、自动初始化......)。
在这个框架中,一些对象方法会被自动调用,比如“init”构造对象和“destroy”窗口卸载。
我对这种销毁方法有两个问题:
- 这个方法有什么用?
我认为它应该对 DOM 对象(解除绑定事件)进行一些清理,但还有其他清理工作要做吗?
- 是否应该在另一个事件上调用此方法?是否可以检测到对象何时被销毁并在此时调用此方法?
如果有人对这个框架感兴趣,我把它发布在 gitHub 上,但现在没有文档 :-/ : https://github.com/LeMisterV/EasyPrototype
【问题讨论】:
-
卸载时调用销毁?好吧,该方法可以做任何事情 - 因为它不会对其他任何事情产生任何影响。毕竟,浏览器无论如何都会离开该页面。销毁方法对在网页生命周期内销毁的组件有意义。与桌面应用不同的是,Web 应用的“卸载”无需清理任何东西,桌面应用利用机会将缓冲区写入磁盘、释放文件句柄等。
-
在 Javascript 中,不可能编写一个在对象被“销毁”时/之前自动调用的方法,必须显式调用它。 JS中的“破坏”是什么意思?当对象被垃圾收集时 - 这是随机的?什么时候释放它的最后一个句柄?
-
我怀疑@Nicolas 担心 IE 中的内存泄漏,当 DOM 元素具有值为 JavaScript 对象的属性时,这会出现问题,尤其是。关闭。 DOM 内存管理器不知道如何回收该空间,因此它不会。
-
@Pointy:即使在 IE 中,UNLOAD 也没有内存泄漏,通常,destroy() 在其他浏览器中也可以这样做 - 如果组件在页面的生命周期内被销毁(有些应用程序不使用显示/隐藏小部件,但每次都会执行一个新的 Widget()/widget.destroy() 循环。
-
@Mörre 我认为 IE6 肯定存在循环引用问题,这些问题在浏览器进程的生命周期内不会被释放。 Here 是微软的一篇文章,还有许多其他人可以描述这个问题。
标签: javascript destructor