如何删除对象并捕获对象事件的删除?

How can I delete an object and capture the deletion of the object event?

提问人:Gary 提问时间:9/12/2023 最后编辑:isherwoodGary 更新时间:9/12/2023 访问量:31

问:

我正在尝试做两件事:

  1. 删除对象,无论是 const 还是 let - 在 Node.js 中执行此操作的正确方法
  2. 捕获 null 或 undefined 的删除或分配给全局范围内的 cInst 或 dInst 对象。我不想将 global 或 globalThis 对象包装在对象或闭包对象中来完成此操作。

有没有办法做到这一点?

'use strict';

function TestBase() {};
let dInst = TestBase();
delete dInst; // fails with use strict
dInst = undefined // works
const cInst = TestBase();
delete cInst; // works without use strict
'use strict';

const cInst = TestBase();
delete cInst; // fails without use strict
JavaScript 节点 .js 对象 全局

评论

1赞 evolutionxbox 9/12/2023
你为什么要这样做?
0赞 Gary 9/12/2023
@evolutionxbox注册一个 on destroy 回调

答:

2赞 Barmar 9/12/2023 #1
  1. 无法显式删除对象,当所有引用消失时,垃圾回收器会自动删除对象。如果对对象的唯一引用是单个变量,则只需重新分配变量即可将其删除;如果它是局部变量,则从函数返回将导致将其删除。

  2. 有关如何注册回调以在 GC 删除对象时收到通知的文档,请参阅 Finalization Registry

评论

0赞 Gary 9/12/2023
让我试试这个
0赞 Gary 9/12/2023
我正在看这个 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/... .register(target, heldValue) 是做什么用的?似乎目标必须是 object 类型并且不采用原始 VLUE
1赞 Barmar 9/12/2023
请参阅官方规范。它引用了 CanBeHeldWeak 的概念