Джон
и в каких конкретно случаях их хорошо юзать
Michael
Сделали бы нормальную нотацию для записи
Michael
Типа :symbol
Michael
Иначе просто неудобно
Дима
Типа :symbol
Ты же говорил нормальную
Anonymous
ок Object.getOwnPropertySymbols
Anonymous
и все ваши приватные св-ва тут
Vladimir
Их юзают, когда нужно добавить свойство объекту, но боятся коллизий
Anonymous
бида
Дима
Это свойство можно получить только специально постаравшись
Vladimir
никто не говорит, что они приватные
Anonymous
кто-то говорит
Дима
Это защита от дурака а не от настырного самоубийцы
Джон
Их юзают, когда нужно добавить свойство объекту, но боятся коллизий
то есть в объект можно добавить сколько хош свойств с одинаковыми названиями, грубо говоря?
Anonymous
дуракам в код не надо вообще
Джон
Это то, что они дают?
Michael
Не работайте с дураками
Vladimir
они не более приватные чем non enumerable
Джон
Да
и как их одинаковых потом доставать оттуда?
Дима
Каждый уникален
Дима
У тебя есть ссылка на него
Джон
У тебя есть ссылка на него
а можно простенький примерчик?
Anonymous
Anonymous
приватность такая приватность
Дима
Да все, все , ты молодец
Vladimir
ща покажу как побороть getOwnPropertySymbols
Anonymous
его можно и без символов побороть
Anonymous
символы с приватностью никак не помогают
Anonymous
и они не для того
Vladimir
ладно, не буду показывать
Anonymous
они для toStringTag, toPrimitive и тд
Anonymous
метапрограммирование
Vladimir
Причем здесь метапрограммирование?
Vladimir
Это просто интерфейсы
Anonymous
просто механизмы, которые нужны для этого тоже заэкспозили
Anonymous
это не интерфейсы
Ale
приватность норм на викмап
Vladimir
Можно было сделать это просто строками, как toJSON
Ale
и приватную мапу около класса держать)
Vladimir
или toString
Дима
а можно простенький примерчик?
_mark = Symbol('mark') function mark (o){ o [_mark] = 'mark' return o } print (o){return o [_mark] ? o [_mark] : 'no mark'} let obj =mark({}) print(obj) //=>'mark'
Anonymous
просто valueOf и тд были ошибкой
Vladimir
или valueOf
Anonymous
это норм имя для метода
Anonymous
почему я должен терять при этом что-то нативное?
Anonymous
надо это обойти
Anonymous
как? символами
Anonymous
toPrimitive, toStringTag
Vladimir
да нет, просто сейчас уже небезопасно это делать строкамии за обратной совместимости
Vladimir
точно также как и небезопасно добавлять новые поля на прототипы
Vladimir
особенно на Object.prototype
Anonymous
так я и говорю
Anonymous
переопределил и попал
Anonymous
в этом примере символы не нужны
Anonymous
символы оверрейтед
Дима
Хорошо, пиши без них
Джон
премер
Дима
Никто не заставляет
Джон
так интересует ситуация, где без них никак
Anonymous
да. что-то не так?
Джон
а не тот, где их можно вставить, а можно и без них
Anonymous
Джон
😄
Джон
pornhub
Дима
И куча менее известных мета-символов
Джон
я наверное еще не дорос до такого
Vladimir
Вот питону пох
Vladimir
__iter__
Vladimir
И все
Джон
маленький еще для символов
Vladimir
Так что концепутально Symbol(str) это '__' + str + '__')
Anonymous
питон не лучший пример языка по сравнению даже с жс
Vladimir
Да понятно