首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >WeakMap在EcmaScript5中的实现?

WeakMap在EcmaScript5中的实现?
EN

Stack Overflow用户
提问于 2013-05-04 03:12:04
回答 1查看 4.1K关注 0票数 23

我遇到过一个在ES5中实现跨浏览器WeakMapJavaScript library。(WeakMap计划用于ES6。)

如果没有JavaScript语言本身的支持,这怎么可能工作呢?

编辑:为了清楚起见,我指的是地图,而不是常规地图。我使用Chrome的分析器测试了这个项目,密钥不是由强引用持有的。它们不需要从WeakMap中删除就可以被GC‘s。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-04 05:35:37

我花了一段时间来理解代码,但我突然想到:键本身是用来存储对值的引用的。

例如,将多个图层添加到set

代码语言:javascript
复制
defProp(obj, globalID, { value: store });

其中,defProp已定义为Object.definePropertyobj是键,globalID是guid,store是包含值的存储对象。

然后在get中,它通过以下方式查找值

obj[globalID];

这是非常聪明的。WeakMap实际上并不包含对任何内容(弱引用或其他引用)的引用--它只是设置了一个策略,规定在何处秘密存储值。使用Object.defineProperty意味着您不会意外地发现值存储--您必须知道神奇的guid才能查找它。

由于键直接引用了值(而WeakMap没有引用它),所以当对键的所有引用都消失时,它会像正常一样获得GCed。

票数 36
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16366000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档