我已经跨越运行JavaScript库实现跨浏览器WeakMap在ES5。 (WeakMap定于ES6。)
这怎么可能没有JavaScript语言本身支持工作?
编辑:只是要清楚,我指的是一个弱地图,不是正规的地图。 我测试这个项目从使用Chrome的探查和密钥不被强引用举行。 他们得到GC'ed,而不必从WeakMap删除它们。
我已经跨越运行JavaScript库实现跨浏览器WeakMap在ES5。 (WeakMap定于ES6。)
这怎么可能没有JavaScript语言本身支持工作?
编辑:只是要清楚,我指的是一个弱地图,不是正规的地图。 我测试这个项目从使用Chrome的探查和密钥不被强引用举行。 他们得到GC'ed,而不必从WeakMap删除它们。
我花了一段时间来神交代码,但它然后打我: 密钥本身是用来存储值的引用。
例如,若干层到set
它确实
defProp(obj, globalID, { value: store });
其中defProp
已被定义为Object.defineProperty
, obj
是关键, globalID
是一个GUID和store
是包含值的存储对象。
然后倒在get
它查找值与
obj[globalID];
这是非常聪明的。 该WeakMap实际上并不包含任何东西(弱或以其他方式)的参考 - 它只是设置的地方偷偷保存价值的保单。 采用Object.defineProperty
意味着你不会意外发现价值storage--你要知道魔术GUID来关注一下吧。
由于密钥直接引用值(和WeakMap没有提到它),当钥匙的所有引用都消失了,它变得GCed像正常。