Вы не сможете получить доступ к нему напрямую по ключу, если у вас нет ссылки на фактическое: Symbol('asyncId')
, потому что каждый символ уникален
СимволФункция () возвращает значение символа типа, имеет статические свойства, которые предоставляют несколько членов встроенных объектов, имеет статические методы, которые предоставляют глобальный реестр символов, и напоминает встроенный объектный класс, но является неполным в качестве конструктора, посколькуне поддерживает синтаксис "new Symbol ()".
Что вы можете сделать, это перебрать собственные ключи свойств объекта, используя Reflect.ownKeys , который будет включать в себя обычные свойства &символов, а затем получите эту ссылку.
Вы также можете использовать: Object.getOwnPropertySymbols ()
function getObject() {
// You don't have access to this symbol, outside of this scope.
const symbol = Symbol('asyncId');
return {
foo: 'bar',
[symbol]: 42
};
}
const obj = getObject();
console.log(obj);
console.log(obj[Symbol('asyncId')]); // undefined
// or Object.getOwnPropertySymbols(obj)
const symbolKey = Reflect.ownKeys(obj)
.find(key => key.toString() === 'Symbol(asyncId)')
console.log(obj[symbolKey]); // 42
ПРИМЕЧАНИЕ: Объект может иметь несколько клавиш, где key.toString() === 'Symbol(asyncId)'
, это не будет обычным, но имейте в виду, так что вы можете захотетьиспользуйте другую функцию, кроме .find
, если это так.
ПРИМЕЧАНИЕ II : вам не следует изменять значение этого свойства, поскольку оно предназначено только для внутреннего доступа, даже еслисвойство не только для чтения.
function getObject() {
// You don't have access to this symbol, outside of this scope.
const symbol = Symbol('asyncId');
const symbol2 = Symbol('asyncId');
return {
foo: 'bar',
[symbol]: 'the value I don\'t want',
[symbol2]: 'the value I want'
};
}
const obj = getObject();
const symbolKey = Reflect.ownKeys(obj)
.find(key => key.toString() === 'Symbol(asyncId)')
console.log(obj[symbolKey]); // the value I don't want
console.log('=== All values ===');
Reflect.ownKeys(obj)
.forEach(key => console.log(obj[key]));