我遇到了JavaScript library实现跨浏览器WeakMap在ES5中。 (WeakMap 预计用于 ES6。)
如果没有 JavaScript 语言本身的支持,这怎么可能工作?
编辑:需要明确的是,我指的是弱 map ,而不是常规 map 。我使用 Chrome 的分析器测试了这个项目,并且 key 不是由强引用保存的。它们无需从 WeakMap 中删除即可被 GC 处理。
最佳答案
我花了一段时间才理解代码,但后来我突然意识到:键本身用于存储对值的引用。
例如,set
中的几层确实如此
defProp(obj, globalID, { value: store });
其中 defProp
已定义为 Object.defineProperty
,obj
是键,globalID
是 guid,store
是包含值的存储对象。
然后在 get
中查找值
obj[全局ID];
这非常聪明。 WeakMap 实际上并不包含对任何内容(弱或其他)的引用——它只是设置了一个 secret 存储值的策略。使用Object.defineProperty
意味着您不会意外地发现值(value)存储——您必须知道魔法指南才能查找它。
由于键直接引用值(而 WeakMap 不引用它),因此当对键的所有引用都消失时,它会像平常一样被 GC。
关于javascript - EcmaScript5 中的 WeakMap 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34337805/