EcmaScript5中的WeakMap实现
WeakMap implementation in EcmaScript5?
我遇到了一个JavaScript库,它在ES5中实现了跨浏览器的WeakMap。(WeakMap被指定为ES6)
如果没有JavaScript语言本身的支持,这怎么可能工作?
编辑:为了明确,我指的是弱映射,而不是常规映射。我用Chrome的分析器测试了这个项目,键不是由强引用持有的。它们无需从WeakMap中删除就可以被GC化。
我花了一段时间来理解代码,但后来我突然想到:键本身是用来存储对值的引用的
例如,在set
中有几层
defProp(obj, globalID, { value: store });
其中defProp
定义为Object.defineProperty
, obj
为键,globalID
为guid, store
为包含该值的存储对象。
然后在get
中,它用
obj[globalID];
这很聪明。WeakMap实际上并不包含对任何东西(弱或其他)的引用——它只是设置了一个策略,在哪里秘密存储值。使用Object.defineProperty
意味着您不会意外地发现值存储——您必须知道查找它的魔法向导。
由于键直接引用值(而WeakMap不引用它),当所有对键的引用都消失时,它会像正常一样被GCed。
相关文章:
- 如何使用动画实现纸张推车
- 客户端服务器REST API captcha实现
- 如何实现此布局
- Meteor忘记了密码的实现
- 使用Native Sockets在Android中实现WebSockets
- 在样板文件中实现Ajax
- instanceof是如何在JavaScript中实现的
- 如何正确实现Jquery多选小部件
- 实现一个建立在google.com之上的自定义搜索引擎
- 多个组件是如何实现的
- window.location使用jquery mobile实现chrome跳转
- 如何在OpenERP中实现网络摄像头
- Node.js使用Series函数(模式?)实现流控制时出现意外结果
- javascript加密实现,包括可信否认
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- 如何让程序员在javascript中实现正确的回调
- 如何使用自定义辅助对象(handler)实现嵌套的每个循环
- AngularJS智能表全局配置实现
- Expressjs/AngularJS:实现req-flash后出错
- EcmaScript5中的WeakMap实现