ECMAScript 6 中的 Symbol.for(string)

2024-01-01

我花了一段时间,但我终于弄清楚了 ECMAScript 6 中符号的用途是什么:在将属性附加到共享对象(例如 HTML 元素)时避免名称冲突。 (如果您遇到同样的问题,我建议本文 https://hacks.mozilla.org/2015/06/es6-in-depth-symbols/.)

但后来我偶然发现符号.for() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/for。显然,ECMAScript 6 将维护一个全局符号注册表,您可以通过提供符号描述来使用此函数进行查询。再来?如果我使用符号来避免名称冲突,为什么我希望自己以外的代码使用它们? (*) 我如何避免全局注册表中的名称冲突?符号共享似乎完全颠覆了这个概念,而全局注册表更是如此。

(*) 是的,我知道符号不是truly私人的,但这不是重点。


如果您不希望您的符号在 GlobalSymbolRegistry 中可用,请不要使用Symbol.for.

仅当您想允许其他代码使用您的符号时才使用它。

在下面的示例中,我创建一个符号来将数据存储在 DOM 元素中。我可能想要所有其他代码(例如内部原始未编译处理程序 http://www.w3.org/TR/html5/webappapis.html#internal-raw-uncompiled-handler)来读取该数据。所以我让这个符号在全球范围内可用。

var sym = Symbol.for('storeDataInDOM');
document.querySelector('button')[sym] = 'Hello, world!';
<button onclick="alert(this[Symbol.for('storeDataInDOM')])">Click me</button>

这就像创建全局变量:通常应该避免,但有其优点。但用符号而不是字符串。

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

ECMAScript 6 中的 Symbol.for(string) 的相关文章

随机推荐

  • numpy 中的 FFT 与 MATLAB 中的 FFT 没有相同的结果

    我有一个带有复数的向量 可以找到here https www dropbox com s ve0de4ebk41s8y2 data txt dl 1 无论是在 Python 中还是在 MATLAB 中 我正在计算ifft 转化为 ifft
  • 抽象/虚拟方法的通用返回类型

    我有两个基类之间的关系 public abstract class RecruiterBase
  • 是否可以在 Core Data 中将 NSManagedObjects 返回为只读?

    我正在使用 Core Data 来缓存我正在编写的模块中的服务器数据 并且希望能够强制应用程序的其他部分不修改该数据 是否可以将我的 NSManagedObject 实例或用于获取它们的 NSManagedObjectContext 标记为
  • Rails 测试数据库在运行几次后未清除

    我正在使用 rspec 进行测试 我注意到运行测试后 它有时会在测试数据库中留下一些记录 我不知道为什么 我在配置文件中将 use transactional fixtures 设置为 true 但除非我手动删除记录 否则它们不会消失 有人
  • numpy 中的精度:比较数字时的问题

    首先介绍一下背景 我正在查找实数对称矩阵的特征值和特征向量 其中行总和为 0 更具体地说 一旦找到特征向量 我就会使用 argsort 来查找对特征值之一进行排序的排列 并将排列应用于原始矩阵 现在 我使用 numpy 包在 python
  • 为什么 @JsonProperty 不适用于 Kotlin 中的驼峰式属性

    有一个非常简单的类 class Price JsonProperty YPRICE val yprice String null JsonProperty ZPRICE val zPrice String null 以及将以下代码序列化为字
  • 异步任务 android onPostExecute

    在我的 Android 应用程序中 我使用 AsyncTask 从互联网下载图像 我传递了 url 然后我的 AsyncTask 进行下载 但是我如何将位图返回到我的活动中 目前 我将回调函数传递给 asynctask 构造函数 并在 On
  • 替换成有一个where子句吗?

    我正在编写一个应用程序 并使用 MySQL 作为 DBMS 我们正在下载房产报价 但存在一些性能问题 旧的架构看起来像这样 属性已更新 如果受影响的行数不为 1 则更新不被视为成功 否则更新查询解决了我们的问题 如果更新不成功 并且受影响的
  • 使用 HttpClient 检查互联网连接

    我很难理解以下代码如何处理偶尔的互联网连接丢失 理想情况下 我想在连接丢失后暂停应用程序 并在连接再次启动时恢复 有关于如何操作的指南吗 HttpClientHandler clientHandler new HttpClientHandl
  • 平衡绳的串联复杂度是多少?

    我查看了不同的论文 以下是我收集的信息 SGI实施 http www sgi com tech stl ropeimpl html and C cords http www cs ubc ca local reading proceedin
  • 不寻常的范围解析运算符

    今天重构一些 C 代码时 我得到了一些代码 可归结为以下内容 class x public void x y 是否x 范围解析运算符在这里做任何事情 这是一个错误 还是其他什么 我最好的猜测是 它是一些自动完成功能留下的人工制品 但我很想知
  • 从文件系统或 URL 解析 iPhone 的 Objective-C 中的 m3u 文件

    下面的示例应从 m3u 播放列表获取链接并将其添加到 anArray 所以我会得到NSArray NSMutableArray 其中包含某些链接 NSString fileContents NSString stringWithConten
  • 使用 JavaScript 三角法缩放旋转图像以填充 HTML5 Canvas?

    下面是我当前正在使用的代码 和0旋转 图像正确缩放以填充画布 如同background size cover 除了在 Canvas 上使用 JavaScript 我正在尝试添加旋转功能 具有以下功能 旋转时保持图像居中 我尝试使用width
  • 1318 - PROCEDURE 的参数数量不正确

    DROP PROCEDURE ModificarUsuario CREATE DEFINER root localhost PROCEDURE ModificarUsuario IN Aid INT IN Aced VARCHAR 100
  • 如何获取启动时运行的 CHKDSK 结果?

    有问题的 CHKDSK当我的机器重新启动时运行 并显示一些内容 问题是我不知道它显示了什么 因为它随后继续 完成后重新启动机器 我怎样才能让它停下来 暂停一下还是让我看看它做了什么 chkdsk 无法运行 因为该卷正在被另一个进程使用 CH
  • 如何从 pyodbc 结果行创建逗号分隔的字符串?

    我有一个存储在cursor rows 中的行结果集 这些行是从pyodbc cursor execute 命令返回的 解压这些数据并将其放入逗号分隔字符串列表 或解压到自定义对象中 的最快方法是什么 目前我正在做以下事情 cursor ex
  • 如何使用 Google Sheets API 添加超链接?

    我正在尝试编写一个 python 脚本来添加超链接到谷歌工作表 我正在为此使用谷歌API 通过搜索 我发现我需要向其余 api 传递 HYPERLINK 类型的消息 来自文档 https developers google com shee
  • 如何检查单选按钮

    我有以下 MySQL 表 id Title Windows Linux IDE GUI RAD 1 Software 1 1 0 1 0 0 2 Software 2 0 1 0 1 0 我想通过查询 mySQL 数据库来填充表单 到目前为
  • 使用 std::function 移动语义

    std function从右值引用提供构造函数 按照标准 移动的函数对象会发生什么 会不会是空的 这样再次调用就没有效果了 这个问题有太多的混乱 我会尽力把事情说清楚 本节描述 std 定义对象的移出状态 17 6 5 15 lib typ
  • ECMAScript 6 中的 Symbol.for(string)

    我花了一段时间 但我终于弄清楚了 ECMAScript 6 中符号的用途是什么 在将属性附加到共享对象 例如 HTML 元素 时避免名称冲突 如果您遇到同样的问题 我建议本文 https hacks mozilla org 2015 06