有時但願在函數外或不一樣的文件能訪問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