Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中不保持对象活动的引用列表_Javascript - Fatal编程技术网

javascript中不保持对象活动的引用列表

javascript中不保持对象活动的引用列表,javascript,Javascript,这个问题类似于这个问题,只是我不想在chrome代码中这样做 在javascript(在浏览器中运行)中,我希望跟踪使用特定构造创建的所有对象。简单,我可以这样做: var listObjects = []; function Object() { listObjects.push(this); } Object.prototype = { // class members }; 这很好,但对象即使不再使用也会被保留(垃圾收集器会保留它们,因为在listObjects中仍然有一个

这个问题类似于这个问题,只是我不想在chrome代码中这样做

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

var listObjects = [];

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

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

  • 会有弱引用
  • 可以找出一个对象有多少个引用
  • 可以定义一个自动调用的析构函数
  • 不幸的是,根据我的研究,这些都不存在于javascript中(至少在浏览器中运行时不存在)


    有人能想出另一种在javascript中工作的方法吗,或者我错过的一些javascript功能可以用来实现这一点吗?

    我认为javascript中没有任何语言支持这一点,也没有任何对弱引用的支持,至少在浏览器环境中没有

    然而,你可以尝试做一些事情(漂亮、漂亮、丑陋…)保持你对
    函数对象()的想法
    覆盖,但让它将要跟踪的对象细节写入屏幕上不可见的

    好了:跟踪而不保留对象的实际引用。但是,您仍然需要实现一些查询函数来从该div检索信息,并随着时间的推移将其清除,否则也会出现泄漏

    或者你也可以按照你的建议去做:创建一个通用构造函数和一个通用析构函数,但这需要你显式地调用它们来从你的列表中删除对象。但如果发生任何意外情况,您的析构函数将不会被调用,因此您可能会以意外的方式大量泄漏


    想知道其他人是否能想出其他选择。

    除了将对象添加到数组/列表之外,将对象写入div对我有什么帮助?@Nathan:这对你没有任何帮助。它以完全相同的方式(跟踪对象)帮助您,但不存在这些对象仍然被引用和不符合垃圾收集条件的问题。这并不理想,但那会管用的。