【发布时间】:2015-06-08 18:31:33
【问题描述】:
我正在尝试用 WeakMaps 做 明显 的事情:我想创建一个弱引用。特别是,我希望有一个事件侦听器列表,该列表不会影响侦听器的生活。
所以我很高兴发现 WeakMaps,直到我看到它们只是为了满足一个(相当罕见的)用例而构建的,扩展了原本密封的对象。我想不出我什么时候想这样做,但我一直需要听众名单。
是否可以以我没想到的巧妙方式使用 WeakMaps?
【问题讨论】:
-
只是好奇:您设想什么样的架构?谁持有对事件监听器的引用,让它们保持活力?这在事件侦听器执行副作用的当前设计中不起作用。
-
您要解决什么实际问题?由于 WeakMaps 不起作用(请参阅我的回答),我也许可以提出一些替代解决方案。
-
@dandavis -- 如果其中包含任何闭包引用,函数可能会占用大量资源。
-
对其参数进行操作。返回一个结果。控制外部资源。我想,函数在没有闭包的语言中会做同样的事情。 ;-) @dandavis 有一个很好的观点——如果您的处理程序没有闭包(也许他们在采取行动之前在表上查找内容),那么保留函数列表的开销并不昂贵。当然,这是您在不支持弱引用的语言中应该做的事情。
-
我不是来争论的。我对 dandavis 的评论是——特别是函数可以而且确实会消耗大量资源。你似乎同意我的看法。所以我不确定你想对我说什么。也许您打算将您最初的评论发给 dandavis?
标签: javascript weak-references ecmascript-6 ecmascript-harmony weakmap