dom events - 如何实现在 JavaScript 对象被垃圾回收时触发的函数
dom events - How to implement function that fires when JavaScript object is garbage collected?
实际上,垃圾收集、销毁或以其他方式吹出范围。我想做的是在销毁调用绑定方法的对象时取消绑定非 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
方法的回调函数。
相关文章:
- 在javascript中调用函数/对象引用时,可容纳任何数据类型
- 访问函数对象的上下文属性|如何
- 为什么可以'我们在函数体中为函数对象添加属性,就像在javascript中为对象文字添加属性一样
- 如何将函数对象从javascript传递到Polymer元素
- 为什么函数对象的实例没有继承函数原型属性
- 为什么我会从 JavaScript 函数返回一个命名函数(对象)
- 为什么实例构造函数指向最上面的函数构造函数对象
- 使用object.freeze()扩展函数对象-can't添加字段
- 为什么'这'与函数对象一起使用时会有不同的处理方式
- setTimeout()/setInterval()赢得't执行**我正在传递函数对象,而不是执行函数
- 为什么茉莉花间谍不't通过引用解析函数对象
- 在 mongo map 中调用外部 javascript 函数(对象)或减少上下文的可能方法
- 在 JavaScript 中为函数对象添加别名
- 在 Express JS 中从路由调用函数对象
- 函数对象的名称属性是什么
- 构造函数对象
- 节点.js - 从另一个函数/对象发出事件
- 声明函数是否会创建具有函数名称和分配给它的函数对象的变量
- 函数对象__proto__和原型属性
- 类仿真 - 模块模式与函数对象