gpt4 book ai didi

javascript - 在 javascript 中不使对象保持事件状态的引用列表

转载 作者:行者123 更新时间:2023-11-30 05:53:27 24 4
gpt4 key购买 nike

这个问题类似于这个this一,除了我不想在 chrome 代码中这样做。

在 javascript(在浏览器中运行)中,我想跟踪所有使用特定构造创建的对象。很简单,我可以这样做:

var listObjects = [];

function Object() {
listObjects.push(this);
}

Object.prototype = {
// class members
};

这很好,除了即使不再使用对象也会保留它们(垃圾收集器保留它们是因为在 listObjects 中仍然有一个引用)造成内存泄漏。现在,我可以添加一个“removeObject”函数从列表中删除一个对象,但这需要用户在对象超出范围时手动调用。如果

  1. 会有弱引用
  2. 可以找出一个对象有多少个引用
  3. 可以定义一个自动调用的析构函数

不幸的是,根据我的研究,javascript 中不存在这些(至少当它应该在浏览器中运行时不存在)。

谁能想到另一种在 javascript 中工作的方法,或者我错过的一些 javascript 功能可以用来做到这一点?

最佳答案

我不认为 JavaScript 对此有任何语言支持,也不认为对弱引用有任何支持,至少在浏览器环境中没有。

但是,您可以尝试一些东西(漂亮、漂亮、丑陋……)来保持您对 function Object() 的想法。覆盖,但让它写入一个不可见的 <div>在屏幕上显示要跟踪的对象的详细信息。

好了:在不持有对象实际引用的情况下进行跟踪。但是您仍然需要实现一些查询函数来从该 div 检索信息并随着时间的推移清除它,否则您也会有泄漏。

或者您可以按照您的建议进行操作:创建通用构造函数和通用析构函数,但这需要您显式调用它们以从列表中删除对象。但是,如果发生任何意外情况,您的析构函数将不会被调用,因此您最终可能会以意想不到的方式大量泄漏。

很想知道其他人是否可以想到替代方案。

关于javascript - 在 javascript 中不使对象保持事件状态的引用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13360804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com