dom events - 如何实现在 JavaScript 对象被垃圾回收时触发的函数

dom events - How to implement function that fires when JavaScript object is garbage collected?

本文关键字:函数 对象 JavaScript 何实现 events 实现 dom      更新时间:2023-09-26

实际上,垃圾收集、销毁或以其他方式吹出范围。我想做的是在销毁调用绑定方法的对象时取消绑定非 DOM 元素上的事件处理程序。

<小时 />

编辑:我又看了一下我的代码,并决定我真正需要它的唯一地方是不再需要包含对象的模块。这通常是当用户加载新视图时(这就像"转到新页面",但在 AJAX 中,对吧?所以我所做的是围绕 bind 方法编写一个简单的包装方法,该方法修改回调函数以另外取消绑定自定义viewchange事件的处理程序。然后,我确保每当视图更改时实际触发viewchange

是不可能的。 没有办法知道什么时候有东西已经被或将被垃圾回收。 最好确保在允许销毁对象之前unbind任何事件。

使用 FinalizationRegistry

截至 2020 年 8 月,现代浏览器已支持 ECMAScript 2021 (ES12) 语言规范定义的FinalizationRegistry方法。

const registry = new FinalizationRegistry((value) => {
    console.log(value);
});
const obj = {};
registry.register(obj, "Object 'obj' is garbage collected");

在这里,我们创建一个FinalizationRegistry实例,并使用 .register 将一个对象附加到它。一旦此对象被垃圾回收,就会运行传递给 FinalizationRegistry 方法的回调函数。