JavaScript 中是否有任何方法可以创建对另一个对象的“弱引用”? 这是描述什么是弱引用的 wiki 页面。 这是另一篇用 Java 描述它们的文章。 谁能想出一种在 JavaScript 中实现这种行为的方法?
原文由 Stephen Cagle 发布,翻译遵循 CC BY-SA 4.0 许可协议
JavaScript 中是否有任何方法可以创建对另一个对象的“弱引用”? 这是描述什么是弱引用的 wiki 页面。 这是另一篇用 Java 描述它们的文章。 谁能想出一种在 JavaScript 中实现这种行为的方法?
原文由 Stephen Cagle 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 NodeJS 上运行 JS 时,您可以考虑 https://github.com/TooTallNate/node-weak 。
原文由 Scholle 发布,翻译遵循 CC BY-SA 3.0 许可协议
13 回答13k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
3 回答1.3k 阅读✓ 已解决
更新:自 2020 年 7 月以来,一些实现(Chrome、Edge、Firefox 和 Node.js)支持
WeakRef
WeakRefs 提案 中定义的 s,该提案是截至 12 月 16 日的“第三阶段草案” , 2020.JavaScript 中没有对 weakrefs 的语言支持。您可以使用手动引用计数自行滚动,但不是特别顺利。您不能制作代理包装器对象,因为在 JavaScript 中,对象永远不知道它们何时将被垃圾收集。
因此,您的“弱引用”成为简单查找中的键(例如整数),使用添加引用和删除引用方法,当不再有手动跟踪的引用时,可以删除条目,留下未来的查找该键返回空值。
这并不是真正的 weakref,但它可以解决一些相同的问题。它通常在复杂的 Web 应用程序中完成,以防止在 DOM 节点或事件处理程序与与之关联的对象(例如闭包)之间存在引用循环时浏览器(通常是 IE,尤其是旧版本)的内存泄漏。在这些情况下,甚至可能不需要完整的引用计数方案。