EcmaScript5中的WeakMap实现?

时间:2013-05-03 19:12:04

标签: javascript ecmascript-5 ecmascript-6

我遇到了在{strong> ES5 中实现跨浏览器JavaScript libraryWeakMap。 (WeakMap定于 ES6 。)

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

编辑:为了清楚起见,我指的是地图,而不是常规地图。我使用Chrome的分析器测试了这个项目,并且密钥不是由强引用来保存的。他们得到了GC,而不必从WeakMap中删除它们。

1 个答案:

答案 0 :(得分:33)

我花了一段时间来查看代码,但随后它发现了我:密钥本身用于存储对值的引用。

例如,set中有几个图层可以

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

其中defProp已定义为Object.definePropertyobj是关键,globalID是guid,store是包含值。

然后在get中向下查找

的值

obj[globalID];

这很聪明。 WeakMap实际上并不包含对任何内容的引用(弱或其他) - 它只是建立了一个秘密存储值的策略。使用Object.defineProperty意味着您不会意外地发现价值存储 - 您必须知道查找它的神奇指导。

由于键直接引用了值(并且WeakMap没有引用它),当对键的所有引用都消失后,它会像正常一样得到GC。