符號-共享符號

應用場景

有時但願在函數外或不一樣的文件能訪問Symbol,上一章講了getOwnPropertySymbols能訪問,如今有更簡潔的方式,能用共享符號訪問同一個符號。函數

定義

根據某個符號名稱(符號描述)可以獲得同一個符號。code

語法

只要符號名或者符號描述是一致的,那就是同一個符號。get

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

當咱們某些時候想讓人家訪問,但又必須是符號,就能夠用共享符號。io

// 獲取共享符號
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
相關文章
相關標籤/搜索