我花了一段时间,但我终于弄清楚了 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(使用前将#替换为@)