#javascript
Не могу понять что дает объявления Symbol идентификаторов через for. Читал несколько статей, суть разницы не уловил. В чем разница и в каких случаях полезно через sybmol.for объявить свойство объекта?
Ответы
Ответ 1
В оф. документах вроде как все описано В противоположность вызову Symbol(), функция Symbol.for() создаёт символ, доступный в глобальном списке реестра символов. Symbol.for() не создаёт новый символ при каждом вызове, вместо этого, метод сначала проверяет, существует ли символ с заданным идентификатором в реестре — и возвращает его, если тот присутствует. Если символ с заданным ключом не найден, Symbol.for() создаст новый глобальный символ. То есть по сути, символ сравнивается как и объект, по ссылке. Даже если мы создадим два "одинаковых" символа, они не будут равны const aSymbol = Symbol('a'); const bSymbol = Symbol('a'); // должны быть равны? aSymbol === bSymbol; // нет :( Если создавать символ через Symbol.for, то мы сможем получить этот символ в другом месте. function createSymbol(name) { Symbol.for(name); } createSymbol('a'); const aSymbol = Symbol.for('a'); const bSymbol = Symbol.for('a'); aSymbol === bSymbol; // теперь норм Если говорить простым языком, то Symbol.for - это просто хранилище для символов, к которому можно обратиться по имени. Сами можете такое сделать с помощью обычного объекта window.GlobalSymbol = { store_: {}, for: function(name) { if(!this.store_[name]) { this.store_[name] = Symbol(name) } return this.store_[name] } } console.log(GlobalSymbol.for('name') === GlobalSymbol.for('name')); console.log(GlobalSymbol.for('name'));
Комментариев нет:
Отправить комментарий