符号-共享符号

188 阅读1分钟

应用场景

有时希望在函数外或不同的文件能访问Symbol,上一章讲了getOwnPropertySymbols能访问,现在有更简洁的方式,能用共享符号访问同一个符号。

定义

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

语法

只要符号名或者符号描述是一致的,那就是同一个符号。

Symbol.for("符号名/符号描述") // 获取共享符号
const syb1 = Symbol.for("abc");
const syb2 = Symbol.for("abc");
console.log(syb1 === syb2); // true

当我们某些时候想让人家访问,但又必须是符号,就可以用共享符号。

// 获取共享符号
const obj = {
    a: 1,
    b: 2,
    [Symbol.for("c")]: 3
}
console.log(obj[Symbol.for("c")]); // 3

实现原理

/*
    1. 有一个全局的变量global, 记录有哪些共享符号
    2. 返回一个函数
 */
const SymbolFor = (() => {
    const global = {}; // 用于记录有哪些共享符号
    console.log(global);
    return function (name) {
        if(!global[name]){
            global[name] = Symbol(name);
        }
        console.log(global);
        return global[name];
    }
})();

const syb1 = SymbolFor('abc');
const syb2  = SymbolFor('abc');
console.log(syb1 === syb2); // true