Size: a a a

JavaScript Noobs — сообщество новичков

2020 July 18

ГЩ

Глеб Щукин in JavaScript Noobs — сообщество новичков
Bohdan Fox
Суть в том, что в строчке  
if (!this[event][subscriber]) this[event][subscriber] = [];
я хочу создавать новое свойство объекта, с новым именем, которое по идее должно быть идентично subscriber, но вместе этого у меня только одно свойство на всех вызовах с именем [Object object]
Я понимаю логику передачи ссылок на объекты, но почему к ним никак не прикреплены имена по типу  notifications или logger?
объекты не так работают. у объектов нет имён. объекты ничего не знают о ссылках на себя. представь что объект - это просто набор переменных, объеденённых вместе. на них можно сослаться, сохранив ссылку в переменную.
ты можешь переопределить метод toString для своих объектов. это наверное заработает в твоём случае. но чёт мне кажется у тебя подход не верный
источник

BF

Bohdan Fox in JavaScript Noobs — сообщество новичков
Tim S
А что в subscribe ? Если объект использовать как ключ, то ключом будет [object,object].
Это аргумент функции, в который при вызове передается объект-подписчик
источник

A

Aleksandr in JavaScript Noobs — сообщество новичков
Глеб Щукин
объекты не так работают. у объектов нет имён. объекты ничего не знают о ссылках на себя. представь что объект - это просто набор переменных, объеденённых вместе. на них можно сослаться, сохранив ссылку в переменную.
ты можешь переопределить метод toString для своих объектов. это наверное заработает в твоём случае. но чёт мне кажется у тебя подход не верный
и тут появляется мутабельность и все усложняется в разы
источник

DE

Daniel Erased in JavaScript Noobs — сообщество новичков
Забавно.
источник

DE

Daniel Erased in JavaScript Noobs — сообщество новичков
У меня type: "module"
ломает __dirname и __filename
источник

DE

Daniel Erased in JavaScript Noobs — сообщество новичков
type: "commonjs" -  всё окей
Странные вещи?
источник

BF

Bohdan Fox in JavaScript Noobs — сообщество новичков
Глеб Щукин
объекты не так работают. у объектов нет имён. объекты ничего не знают о ссылках на себя. представь что объект - это просто набор переменных, объеденённых вместе. на них можно сослаться, сохранив ссылку в переменную.
ты можешь переопределить метод toString для своих объектов. это наверное заработает в твоём случае. но чёт мне кажется у тебя подход не верный
Ну, логика следующая, я создаю объект с именем ивента и в него вкладываю свойства-массивы с именами сабов. Но вот не задача, имён сабов как раз то и нет, потому что передаётся в функцию безименная ссылка на объект☹️
источник

DE

Daniel Erased in JavaScript Noobs — сообщество новичков
Как-то мда?)
источник

DE

Daniel Erased in JavaScript Noobs — сообщество новичков
источник

y

ymdev in JavaScript Noobs — сообщество новичков
Daniel Erased
У меня type: "module"
ломает __dirname и __filename
ну так в es-модулях их нет)
А зачем они тебе нужны? с import.meta.url и работай напрямую. Он отличается только тем, что вместо пути, там еще и название протокола есть file://
Но модуль path с ним прекрасно работает
источник

DE

Daniel Erased in JavaScript Noobs — сообщество новичков
Да, я уже ознакомился)
Спасибо
источник

DE

Daniel Erased in JavaScript Noobs — сообщество новичков
Вообще да. Можно либо через fileURLToPath исправить import.meta.url
Либо через
const __filename = path.normalize(import.meta.url.replace("file:///", ""));
источник

DE

Daniel Erased in JavaScript Noobs — сообщество новичков
Через .replace убрать file:/// и дальше всё нормализуется под path
источник

BF

Bohdan Fox in JavaScript Noobs — сообщество новичков
Ответ:
if (!this[event][${JSON.stringify(Object.keys(subscriber))}])
     this[event][${JSON.stringify(Object.keys(subscriber))}] = [];
😀
источник

BF

Bohdan Fox in JavaScript Noobs — сообщество новичков
Переслано от Bohdan Fox
Суть в том, что в строчке  
if (!this[event][subscriber]) this[event][subscriber] = [];
я хочу создавать новое свойство объекта, с новым именем, которое по идее должно быть идентично subscriber, но вместе этого у меня только одно свойство на всех вызовах с именем [Object object]
Я понимаю логику передачи ссылок на объекты, но почему к ним никак не прикреплены имена по типу  notifications или logger?
источник

ГЩ

Глеб Щукин in JavaScript Noobs — сообщество новичков
Bohdan Fox
Ответ:
if (!this[event][${JSON.stringify(Object.keys(subscriber))}])
     this[event][${JSON.stringify(Object.keys(subscriber))}] = [];
😀
это будет работать только до того момента, пока ключи в твоём объекте не поменяются.
источник

ГЩ

Глеб Щукин in JavaScript Noobs — сообщество новичков
добавь метод toString
источник

BF

Bohdan Fox in JavaScript Noobs — сообщество новичков
Глеб Щукин
это будет работать только до того момента, пока ключи в твоём объекте не поменяются.
это да😀
источник

IB

Ivan Bobchenkov in JavaScript Noobs — сообщество новичков
Люди, подскажите пожалуйста, есть два файла, пытаюсь их собрать webpackом, естественно html-webpack-plugin имеется, но почему-то функции из файла JS HTML просто перестает видить, да и dev-tools тоже перестают видеть её, при том, что в исходниках все на месте
источник

IB

Ivan Bobchenkov in JavaScript Noobs — сообщество новичков
источник