当前位置:  开发笔记 > 编程语言 > 正文

是否可以在javascript中创建"弱引用"?

如何解决《是否可以在javascript中创建"弱引用"?》经验,为你挑选了2个好方法。

在javascript中是否有任何方法可以创建另一个对象的"弱引用"?这是描述弱引用的维基页面. 这是另一篇用Java描述它们的文章.谁能想到在javascript中实现这种行为的方法?



1> bobince..:

JavaScript中的weakrefs没有语言支持.您可以使用手动引用计数自行滚动,但不是特别顺利.您无法创建代理包装器对象,因为在JavaScript对象中永远不知道它们何时会被垃圾收集.

因此,您的"弱引用"在简单查找中成为一个键(例如整数),使用add-reference和remove-reference方法,并且当不再有手动跟踪引用时,可以删除条目,以便将来查找该键返回null.

这不是一个真正的弱点,但它可以解决一些相同的问题.它通常在复杂的Web应用程序中完成,以防止在DOM节点或事件处理程序与与之关联的对象(如闭包)之间存在引用循环时,浏览器(通常是IE,尤其是旧版本)的内存泄漏.在这些情况下,甚至可能不需要完整的参考计数方案.


它仍然是正确的,因为ES6 WeakMaps不是真正的弱引用.WeakMaps仅接受对象作为键,并且对这些对象的引用保持弱.请参阅http://stackoverflow.com/questions/32397729/partial-garbage-collection-of-objects-possible-server-side-js
我没有仔细检查(或使用过)代码,但es-lab有一个提供基本[WeakMap仿真]的脚本(http://code.google.com/p/es-lab/source/browse/trunk/src /ses/WeakMap.js).[Aurora 6](http://hacks.mozilla.org/2011/05/aurora-6-is-here/)(Mozilla)有一个非标准的[WeakMap实现](https://developer.mozilla.org/EN/JavaScript的/参考/ Global_Objects/WeakMap).
使用ES6,这个答案不再正确.请参阅下面的答案http://stackoverflow.com/a/28567560/745190

2> Scholle..:

在NodeJS上运行JS时,您可以考虑https://github.com/TooTallNate/node-weak.

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有