使用弱映射在Javascript中创建常规弱引用

使用弱映射在Javascript中创建常规弱引用,javascript,weak-references,ecmascript-6,ecmascript-harmony,weakmap,Javascript,Weak References,Ecmascript 6,Ecmascript Harmony,Weakmap,我试图用弱映射做一件显而易见的事情:我想创建一个弱引用。特别是,我希望有一个事件侦听器列表,该列表不会影响侦听器的生命 所以我很高兴能找到WeakMaps,直到我看到它们只是为了满足一个(相当罕见的)用例而构建的,它扩展了其他密封的对象。我想不出我什么时候想这么做,但我一直需要听众名单 这是否可能以我没有想到的聪明方式使用WeakMaps呢?不,不可能使用WeakMaps创建弱引用。弱点是不合适的,要使用它们,你总是需要钥匙。这也是一个深思熟虑的决定,所以垃圾收集不会影响程序的语义——这正是您想

我试图用弱映射做一件显而易见的事情:我想创建一个弱引用。特别是,我希望有一个事件侦听器列表,该列表不会影响侦听器的生命

所以我很高兴能找到WeakMaps,直到我看到它们只是为了满足一个(相当罕见的)用例而构建的,它扩展了其他密封的对象。我想不出我什么时候想这么做,但我一直需要听众名单


这是否可能以我没有想到的聪明方式使用WeakMaps呢?

不,不可能使用WeakMaps创建弱引用。弱点是不合适的,要使用它们,你总是需要钥匙。这也是一个深思熟虑的决定,所以垃圾收集不会影响程序的语义——这正是您想要的


真正弱的参考可能来自ES8,请参阅和以获取草稿。

只是好奇:您设想的是什么样的体系结构?谁在保存对事件侦听器的引用,谁在使它们保持活动状态?这在当前事件侦听器执行副作用的设计中不起作用。您试图解决的实际问题是什么?由于WeakMaps不起作用(请参见我的答案),我可能可以建议一些替代解决方案。@dandavis--如果其中包含任何闭包引用,函数可能会占用大量资源。请对其参数进行操作。返回结果。控制外部资源。我想,函数在没有闭包的语言中也可以做同样的事情@dandavis有一个很好的观点——如果你的处理程序没有闭包(也许他们在采取行动之前在表上查找东西),那么保留一个函数列表的开销并不昂贵。当然,这是在一种不支持弱引用的语言中应该做的。我不是来争论的。我的评论是对dandavis的——特别是函数可以而且确实会占用大量资源。你似乎同意我的看法。所以我不确定你想告诉我的是什么。也许你是想把你最初的评论告诉丹达维斯?