WeakMap在EcmaScript5实施?(WeakMap implementation in E

2019-09-01 22:19发布

我已经跨越运行JavaScript库实现跨浏览器WeakMap在ES5。 (WeakMap定于ES6。)

这怎么可能没有JavaScript语言本身支持工作?

编辑:只是要清楚,我指的是一个地图,不是正规的地图。 我测试这个项目从使用Chrome的探查和密钥不被强引用举行。 他们得到GC'ed,而不必从WeakMap删除它们。

Answer 1:

我花了一段时间来神交代码,但它然后打我: 密钥本身是用来存储值的引用。

例如,若干层到set它确实

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

其中defProp已被定义为Object.definePropertyobj是关键, globalID是一个GUID和store是包含值的存储对象。

然后倒在get它查找值与

obj[globalID];

这是非常聪明的。 该WeakMap实际上并不包含任何东西(弱或以其他方式)的参考 - 它只是设置的地方偷偷保存价值的保单。 采用Object.defineProperty意味着你不会意外发现价值storage--你要知道魔术GUID来关注一下吧。

由于密钥直接引用值(和WeakMap没有提到它),当钥匙的所有引用都消失了,它变得GCed像正常。



文章来源: WeakMap implementation in EcmaScript5?