javascript - EcmaScript5 中的 WeakMap 实现?

标签 javascript ecmascript-5 ecmascript-6

我遇到了JavaScript library实现跨浏览器WeakMapES5中。 (WeakMap 预计用于 ES6。)

如果没有 JavaScript 语言本身的支持,这怎么可能工作?

编辑:需要明确的是,我指的是 map ,而不是常规 map 。我使用 Chrome 的分析器测试了这个项目,并且 key 不是由强引用保存的。它们无需从 WeakMap 中删除即可被 GC 处理。

最佳答案

我花了一段时间才理解代码,但后来我突然意识到:键本身用于存储对值的引用。

例如,set 中的几层确实如此

defProp(obj, globalID, { value: store });

其中 defProp 已定义为 Object.definePropertyobj 是键,globalID 是 guid,store 是包含值的存储对象。

然后在 get 中查找值

obj[全局ID];

这非常聪明。 WeakMap 实际上并不包含对任何内容(弱或其他)的引用——它只是设置了一个 secret 存储值的策略。使用Object.defineProperty意味着您不会意外地发现值(value)存储——您必须知道魔法指南才能查找它。

由于键直接引用值(而 WeakMap 不引用它),因此当对键的所有引用都消失时,它会像平常一样被 GC。

关于javascript - EcmaScript5 中的 WeakMap 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34337805/

相关文章:

javascript - 如何访问 .then() 链中先前的 Promise 结果?

javascript - 为什么内置函数没有原型(prototype)属性?

javascript - 将 npm 与 Vanilla js 一起使用

javascript - 主要浏览器缺少对 ECMAScript/JavaScript 支持的区域列表?

javascript - Node js - 编译 Handlebars View 而不渲染它

javascript - Jquery 工具提示和 CSS

javascript - 修改方法以完成从数组中删除空字符串的额外逗号

javascript - 使用 map 过滤但保留索引

javascript - 在工厂函数中公开参数的最佳方法是什么?

javascript - 使用 Material-UI + React 实现抽屉和 AppBar {无法读取 null 的属性 'open'}