根据某个符号名称(符号描述)能够得到同一个符号

  1. const obj2 = (() => {
  2. const s = Symbol('sd')
  3. return {
  4. a: 1,
  5. b: 2,
  6. [s]: 123,
  7. }
  8. })()

根据上面的代码,在对象外部是无法访问到私有属性的如下图
image.png

共享符号语法

  1. Symbol.for("符号名/符号描述") //获取共享符号

将最上面的普通符号修改为共享符号代码如下

  1. const obj = (() => {
  2. const s = Symbol.for('sd')
  3. return {
  4. a: 1,
  5. b: 2,
  6. [s]: 123,
  7. }
  8. })()

image.png

其实现原理

  1. const SymbolFor = (() => {
  2. const global = {};//用于记录有哪些共享符号
  3. return function (name) {
  4. console.log(global)
  5. if (!global[name]) {
  6. global[name] = Symbol(name);
  7. }
  8. console.log(global);
  9. return global[name];
  10. }
  11. })();
  12. const syb1 = SymbolFor("abc");
  13. const syb2 = SymbolFor("abc");
  14. console.log(syb1 === syb2);