此问题与此this类似,但我不想在Chrome代码中执行此操作。
在javascript(在浏览器中运行)中,我希望跟踪使用特定构造创建的所有对象。很简单,我可以这样做:
var listObjects = [];
function Object() {
listObjects.push(this);
}
Object.prototype = {
// class members
};
这很好,除非对象被保留,即使它们不再使用(垃圾收集器保留它们,因为在listObjects中仍有引用)创建内存泄漏。现在,我可以添加一个“removeObject”函数从列表中删除一个对象,但这需要用户在对象超出范围时手动调用。 现在,如果
,这可以解决不幸的是,根据我的研究,这些都不存在于javascript中(至少在它应该在浏览器中运行的时候不存在)。
任何人都可以想到另一种方法可以在javascript中运行,或者我错过了一些可以用来执行此操作的javascript功能吗?
答案 0 :(得分:1)
我认为JavaScript中没有任何语言支持,或者支持弱引用,至少在浏览器环境中不支持。
然而,您可以尝试一些(漂亮,漂亮,非常丑陋......)保持您对function Object()
覆盖的想法,但让它写入一个不可见的{{1}在屏幕上显示要跟踪的对象的详细信息。
你去:跟踪而不保留对象的实际参考。但是你仍然需要实现一些查询函数来从该div中检索信息并在一段时间内清除它,或者你也有泄漏。
或者你可以做你的建议:创建一个通用的构造函数和一个通用的析构函数,但是这需要你明确地调用它们来从列表中删除对象。但是如果出现任何意外情况,你的析构函数就不会被调用,所以你可能会以意想不到的方式泄漏很多东西。
很想知道其他人是否可以考虑替代方案。