pal*_*ogt 22 javascript ecmascript-5 ecmascript-6
我遇到了一个在ES5中实现跨浏览器WeakMap的JavaScript库.(WeakMap定于ES6.)
如果没有JavaScript语言本身的支持,这怎么可能工作?
编辑:为了清楚,我指的是弱地图,而不是常规地图.我使用Chrome的分析器测试了这个项目,并且密钥不是由强引用来保存的.他们得到GC'ed而不必从WeakMap中删除它们.
pal*_*ogt 34
我花了一段时间来修改代码,但后来它击中了我:密钥本身用于存储对值的引用.
例如,set
它有几个层
defProp(obj, globalID, { value: store });
Run Code Online (Sandbox Code Playgroud)
其中defProp
已被定义为Object.defineProperty
,obj
是关键,globalID
是一个GUID和store
是包含值的存储对象.
然后在get
它中查找值
obj[globalID];
这非常聪明.WeakMap实际上并不包含对任何内容的引用(弱或其他) - 它只是建立了一个秘密存储值的策略.使用Object.defineProperty
意味着你不会意外地发现价值存储 - 你必须知道查找它的魔法指南.
由于键直接引用了值(并且WeakMap没有引用它),当对键的所有引用都消失时,它会像正常一样获得GCed.
归档时间: |
|
查看次数: |
3624 次 |
最近记录: |