我遇到过一个在ES5中实现跨浏览器WeakMap的JavaScript library。(WeakMap计划用于ES6。)
如果没有JavaScript语言本身的支持,这怎么可能工作呢?
编辑:为了清楚起见,我指的是弱地图,而不是常规地图。我使用Chrome的分析器测试了这个项目,密钥不是由强引用持有的。它们不需要从WeakMap中删除就可以被GC‘s。
发布于 2013-05-04 05:35:37
我花了一段时间来理解代码,但我突然想到:键本身是用来存储对值的引用的。
例如,将多个图层添加到set
中
defProp(obj, globalID, { value: store });
其中,defProp
已定义为Object.defineProperty
,obj
是键,globalID
是guid,store
是包含值的存储对象。
然后在get
中,它通过以下方式查找值
obj[globalID];
这是非常聪明的。WeakMap实际上并不包含对任何内容(弱引用或其他引用)的引用--它只是设置了一个策略,规定在何处秘密存储值。使用Object.defineProperty
意味着您不会意外地发现值存储--您必须知道神奇的guid才能查找它。
由于键直接引用了值(而WeakMap没有引用它),所以当对键的所有引用都消失时,它会像正常一样获得GCed。
https://stackoverflow.com/questions/16366000
复制相似问题