Firefox JavaScript chrome 代码中的弱引用

2023-12-21

假设我正在写一个类A 在我基于 Jetpack 的库中(即我们正在讨论 chrome/扩展代码):

function A() {
  //constructor
}
A.prototype = {
  //class members
};

用户创建类的实例A:

var a = new A();

现在假设我想跟踪所有实例A创建后,我可以这样做:

var listA = [];

and add listA.push(this);在构造函数中A,最终得到:

var listA = [];

function A() {
  // constructor
  listA.push(this);
}

A.prototype = {
  // class members
}; 

一切都很好,直到用户a删除其参考(例如a超出范围)。我现在有一个问题:listA仍然包含对a所以它永远不会被垃圾收集。而且我没有办法过滤掉listA的实例A否则是无法到达的。我实际上正在泄漏内存。

我需要的是推动listA弱引用而不是常规引用。我认为可以以某种方式做到这一点,但我真的不知道从这里该去哪里。我可以想象这样的事情:

var weak_a = new weakRef(a);
assert(weak_a.ref === a);

但随后我不知道,例如,如何测试弱引用是否仍然有效。或者如何有效地过滤掉死的弱条目listA。有什么建议么?


你只需要上课表明它支持弱引用 https://developer.mozilla.org/en/Weak_reference。然后,当您想使用它的弱引用版本时,您将需要使用Components.utils.getWeakReference https://developer.mozilla.org/en/Components.utils.getWeakReference并存储它。这是一些测试代码 https://mxr.mozilla.org/mozilla-central/source/js/src/xpconnect/tests/unit/test_js_weak_references.js这向您展示了如何在 JavaScript 中更多地使用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firefox JavaScript chrome 代码中的弱引用 的相关文章

  • 使用日期类型将输入字段中的日期居中

    我想将日期居中input not input inside div 如果我进行居中 它将把日期居中于input因为有一个右侧面板用于根据日历选择日期 该面板根据输入宽度调整大小 用于演示的小代码片段 center text align ce
  • 在 Meteor.method 中调用函数返回未定义

    过去几天我一直在尝试从 Meteor 方法获取返回对象 每次我这样做我都会得到undefined在客户端上 Meteor methods CORSTest function let url www theverge com 2017 4 1
  • 茉莉花节点没有输出

    我是 JavaScript Node js 和 jasmine 的新手 我正在尝试运行 Node Craftsman Book 一书中的测试 FilesizeWatcher 我创建了 package json 文件并运行 npm insta
  • 从 DOM 中删除后,动态添加的 JavaScript 脚本会继续执行

    因此 我正在创建一个 SPA 并使用 AJAX 将 HTML 页面加载到我网站的索引页面中 问题是 当包含我的一个页面时 它似乎会徘 徊并执行其中的 JavaScript 代码 即使它随后从 DOM 中删除 索引 html 正文 div d
  • 捕获外部脚本文件中的 javascript 错误

    我有一点 JavaScript Jquery 工具的叠加层 http flowplayer org tools overlay index html 当放到错误使用它的页面上时可能会引发异常 我正在尝试优雅地处理它 我有一个通用的 wind
  • 一个 Next.js 路由中的两个不同子域

    我想使用构建一个新平台Next js https nextjs org React js https reactjs org and 反应路由器 https reacttraining com react router web guides
  • WebDriver:更改事件未触发

    我有一个使用 KnockoutJS 的应用程序 我正在尝试编写一些测试表单的测试 如果您不了解 KnockoutJS 简单来说 它提供了从我的视图到我的数据模型的绑定 这意味着当我在输入字段中键入值时 我的基础对象会自动使用该输入字段值进行
  • 为什么我的 onclick 事件自动触发

    加载页面时最初显示 Hello World 我希望它仅在单击按钮后显示 我知道我可以通过向按钮添加内联事件侦听器来做到这一点 我可以只用脚本编写所有这些代码吗
  • NodeJS 无法加载 css 文件

    所以我正在尝试制作一个 NodeJS 服务器 并且我尝试保留尽可能少的附加组件 但是 我遇到了一个问题 我似乎无法加载任何内容CSS我调用的文件HTML文件 该调用似乎确实由服务器处理 但它不会显示在浏览器中 My 网络服务器 js fil
  • 如何在参数上使用 .reduce() 而不是特定的数组或对象?

    我想定义一个函数 flatten 将多个元素展平为一个数组 我知道以下是不可能的 但本质上我想这样做 var flatten function var flattened arguments reduce function acc elem
  • 如何使用 selenium 获取 javascript 结果?

    我有以下代码 from selenium import selenium selenium selenium localhost 4444 chrome http some site com selenium start sel selen
  • 如何检查jquery数据表中的每个复选框?

    我有一个第一列带有复选框的表格 我使用 jQuery DataTable 插件显示我的表格 我制作了 2 个链接来选择 取消选择每个复选框 这是选择全部的一个 a href Select all a 和 JavaScript functio
  • Web浏览器控件:如何捕获文档事件?

    我正在使用 WPF 的 WebBrowser 控件加载一个简单的网页 在这个页面上我有一个锚点或一个按钮 我想在我的应用程序后面的代码中 即在 C 中 捕获该按钮的单击事件 WebBrowser 控件是否有办法捕获加载页面元素上的单击事件
  • chrome 扩展 - 将数据从后台传递到自定义 html 页面

    创建浏览器扩展 我必须从 background js 打开新选项卡并将 JSON 数据传递到这个新选项卡 在新选项卡中 我使用传递的 JSON 数据来操作 渲染 DOM 下面是我的 background js 的一部分 我在其中使用自定义
  • 如何为 ng-repeat orderBy 创建回调?

    寻找一种方法让 AngularJS 的 ng repeat orderBy 过滤器在完成渲染后执行回调 Markup div table thead tr th Name th th Age th tr thead tbody tr tr
  • while 循环元素状态 cypress

    我有一个问题 我想单击一个按钮直到它消失 但次数可能会有所不同 所以我想检查可见性状态 当可见 true时单击按钮 当可见 false时结束测试 但问题是我不知道如何循环从获取元素到末尾的所有链 单击按钮一次 由于中断而停止 如果我删除中断
  • 如何在 JavaScript 中设置/更新 String 对象的值

    我有一个具有一些属性的对象字符串对象 var obj foo new String bar 我在用字符串对象因为我需要在对象上存储额外的子属性 同时仍然能够获取字符串值 obj foo baz baz obj foo gt bar 我觉得问
  • Javascript / jQuery - 转换特殊 html 字符

    我有一个pre元素中包含一些 html 代码 该代码中有特殊字符 例如 lt 所以它不会破坏页面 然后我有一个 javascript 函数 它获取此 pre 元素的内容 突出显示它 使用 codemirror 并用突出显示的文本替换元素内容
  • Angular 5 中 Observable.ForkJoin 的重复 Http 请求

    我有一个 Angular 5 应用程序 组件中包含以下代码 ngOnInit Observable forkJoin this highlightedInsight this insightService getHighlightedIns
  • html5 canvas 使用图像作为蒙版

    是否可以使用具有形状的图像作为整个画布或画布内图像的蒙版 我想将图像放置在画布中 并在图像上添加蒙版 然后将其另存为新图像 您可以使用 source in globalCompositeOperation 将黑白图像用作蒙版 首先 将蒙版图

随机推荐

  • Rails 阻止在 before_create 回调中创建对象

    我想检查新记录的一些属性 如果某些条件成立 则阻止创建对象 before create check if exists def check if exists if condition logic for not creating the
  • 如何在 Swift 3 中检查当前线程?

    如何检查 Swift 3 中当前线程是哪一个 在 Swift 的早期版本中 可以通过执行以下操作来检查当前线程是否为主线程 NSThread isMainThread 看起来好像很简单Thread isMainThread在斯威夫特 3 中
  • Entity Framework Core 中的动态 DbSet

    string tableName TblStudents Dictionary
  • Docker镜像缓存失效何时发生?

    也许我的Google Foo不够强大 但我找不到关于缓存中的Docker镜像何时失效的明确列表 具体来说 我至少对以下场景感兴趣 无效的原因是时间变化 https stackoverflow com a 26612694 371137 vs
  • 为什么 Object.GetType() 不是虚拟的?

    代码示例取自 MSDN public class Test public static void Main MyBaseClass myBase new MyBaseClass MyDerivedClass myDerived new My
  • 我们通常应该对浮点数使用浮点文字而不是更简单的双精度文字吗?

    In C or maybe only our compilers VC8 and VC10 3 14 is a double literal and 3 14f is a float literal 现在我有一个同事说 我们应该使用浮点文字
  • MySQL错误111无法连接到服务器

    我有一个 connection php 文件 该文件应该连接到远程数据库 这是代码 现在我相信我的所有变量都是正确的 因为我可以通过以下方式连接到数据库Toad http www quest com toad E2 80 8E 我通过 lo
  • Android 将设备坐标系转换为“用户”坐标系

    我的问题类似于改变android中的传感器坐标系 https stackoverflow com questions 10762133 changing sensor coordinate system in android 我希望能够比较
  • 如何将 Flutter 应用程序与 Python 代码集成 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想制作一个使用 Python 模块的 Flutter 应用程序 集成 Python 代码的选项有哪些 如何在 2 个运行时之间编组数
  • 多处理模块中的 ThreadPool 与 Pool 有什么区别?

    有什么区别ThreadPool and Pool in multiprocessing模块 当我尝试我的代码时 这是我看到的主要区别 from multiprocessing import Pool import os time print
  • Python 版本性能

    在哪里可以找到 python 版本之间的比较速度基准 例如2 6 2 7 3 0 3 1和3 2版本之间的性能 Python 软件基金会在以下位置设有一个速度比较网站 https speed python org comparison ht
  • 如何使用 while 循环读取文本文件

    我需要能够从文件中读取 3 个独立的文本块 并使用 while 循环将它们显示出来 包括计算结果 目前我只能显示一段文本 我不知道如何在这里完全像文本文件中一样格式化它 所以请原谅图像 文本文件 https i stack imgur co
  • 获取图像的压缩比

    我使用 LibJPEG 来读取 JPEG 压缩图像 有没有办法获取未更改图像的当前压缩率 您指的是编码质量 通常是 0 100 的数字吗 它不会被存储 它被用作图像编码的指南 以了解波的准确度 然后将其丢弃 任何 JFIF 标头结构中都没有
  • WPF TextBlock 中的文本垂直对齐

    如何为 TextBlock 内的文本指定垂直居中对齐 我找到了 TextAlignment 属性 但它用于水平文本对齐 如何实现垂直文本对齐 Textblock 本身无法进行垂直对齐 我发现最好的方法是将文本块放在边框内 这样边框就会为您进
  • 未找到类型的构造函数

    异常消息 Constructor on type StateLog not found 我有以下代码 该代码仅适用于一个类 List
  • 操作错误,没有这样的列。姜戈

    我正在浏览位于以下位置的 Django REST 框架教程 http www django rest framework org http www django rest framework org 我快完成了 刚刚添加了身份验证 现在我得
  • Monte Carlo pi 近似的并行化

    我正在编写一个 C 脚本来与 OpenMp 并行化 pi 近似 我认为我的代码运行良好 输出令人信服 我现在用 4 个线程运行它 我不确定的是 这段代码是否容易受到竞争条件的影响 如果是 我如何协调这段代码中的线程操作 代码如下 inclu
  • 在 iTextSharp 中的两个表格之间添加空格

    正如标题所示 我正在使用 iTextSharp 生成报告 我想在两个表之间添加一个空格 但我不知道如何做 这是我的代码 var boldFont FontFactory GetFont FontFactory HELVETICA BOLD
  • 将字符串转换为 JSON 数组

    我有来自 Web 服务的以下 JSON 字符串 并尝试将其转换为JSONarray locations lat 23 053 long 72 629 location ABC address DEF city Ahmedabad state
  • Firefox JavaScript chrome 代码中的弱引用

    假设我正在写一个类A 在我基于 Jetpack 的库中 即我们正在讨论 chrome 扩展代码 function A constructor A prototype class members 用户创建类的实例A var a new A 现