javascript中不保持对象活动的引用列表
这个问题类似于这个问题,只是我不想在chrome代码中这样做 在javascript(在浏览器中运行)中,我希望跟踪使用特定构造创建的所有对象。简单,我可以这样做:javascript中不保持对象活动的引用列表,javascript,Javascript,这个问题类似于这个问题,只是我不想在chrome代码中这样做 在javascript(在浏览器中运行)中,我希望跟踪使用特定构造创建的所有对象。简单,我可以这样做: var listObjects = []; function Object() { listObjects.push(this); } Object.prototype = { // class members }; 这很好,但对象即使不再使用也会被保留(垃圾收集器会保留它们,因为在listObjects中仍然有一个
var listObjects = [];
function Object() {
listObjects.push(this);
}
Object.prototype = {
// class members
};
这很好,但对象即使不再使用也会被保留(垃圾收集器会保留它们,因为在listObjects中仍然有一个引用),这会造成内存泄漏。现在,我可以添加一个“removeObject”函数,从列表中删除一个对象,但这需要用户在对象超出范围时手动调用。
现在,如果
有人能想出另一种在javascript中工作的方法吗,或者我错过的一些javascript功能可以用来实现这一点吗?我认为javascript中没有任何语言支持这一点,也没有任何对弱引用的支持,至少在浏览器环境中没有 然而,你可以尝试做一些事情(漂亮、漂亮、丑陋…)保持你对
函数对象()的想法
覆盖,但让它将要跟踪的对象细节写入屏幕上不可见的
好了:跟踪而不保留对象的实际引用。但是,您仍然需要实现一些查询函数来从该div检索信息,并随着时间的推移将其清除,否则也会出现泄漏
或者你也可以按照你的建议去做:创建一个通用构造函数和一个通用析构函数,但这需要你显式地调用它们来从你的列表中删除对象。但如果发生任何意外情况,您的析构函数将不会被调用,因此您可能会以意外的方式大量泄漏
想知道其他人是否能想出其他选择。除了将对象添加到数组/列表之外,将对象写入div对我有什么帮助?@Nathan:这对你没有任何帮助。它以完全相同的方式(跟踪对象)帮助您,但不存在这些对象仍然被引用和不符合垃圾收集条件的问题。这并不理想,但那会管用的。