【问题标题】:Creating a regular weak-reference in Javascript using WeakMaps使用 Wea​​kMaps 在 Javascript 中创建常规弱引用
【发布时间】:2015-06-08 18:31:33
【问题描述】:

我正在尝试用 Wea​​kMaps 做 明显 的事情:我想创建一个弱引用。特别是,我希望有一个事件侦听器列表,该列表不会影响侦听器的生活。

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

是否可以以我没想到的巧妙方式使用 Wea​​kMaps?

【问题讨论】:

  • 只是好奇:您设想什么样的架构?谁持有对事件监听器的引用,让它们保持活力?这在事件侦听器执行副作用的当前设计中不起作用。
  • 您要解决什么实际问题?由于 WeakMaps 不起作用(请参阅我的回答),我也许可以提出一些替代解决方案。
  • @dandavis -- 如果其中包含任何闭包引用,函数可能会占用大量资源。
  • 对其参数进行操作。返回一个结果。控制外部资源。我想,函数在没有闭包的语言中会做同样的事情。 ;-) @dandavis 有一个很好的观点——如果您的处理程序没有闭包(也许他们在采取行动之前在表上查找内容),那么保留函数列表的开销并不昂贵。当然,这是您在不支持弱引用的语言中应该做的事情。
  • 我不是来争论的。我对 dandavis 的评论是——特别是函数可以而且确实会消耗大量资源。你似乎同意我的看法。所以我不确定你想对我说什么。也许您打算将您最初的评论发给 dandavis?

标签: javascript weak-references ecmascript-6 ecmascript-harmony weakmap


【解决方案1】:

不,不可能使用 Wea​​kMaps 创建弱引用。 WeakMaps 不可迭代,要使用它们,您总是需要密钥。这是一个深思熟虑的决定(也是 here),因此垃圾收集不会影响程序的语义 - 这正是您想要的。

真正的弱引用可能随 ES8 一起提供,请参阅 herethere 了解草稿。

【讨论】:

    猜你喜欢
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 2021-09-23
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多