13

Я пытаюсь сделать очевидным вещь с WeakMaps: Я хочу создать слабую ссылку. В частности, я хочу иметь список слушателей событий без этого списка, влияющих на жизнь слушателя.Создание регулярной слабой ссылки в Javascript с использованием WeakMaps

Так что я был очень рад найти WeakMaps, пока не увидел, что они были созданы только для удовлетворения одного (довольно редкого) прецедента, расширяющего объекты, которые иначе были запечатаны. Я не могу думать, когда я когда-либо хотел это сделать, но мне нужны списки слушателей все время.

Можно ли использовать WeakMaps каким-то умным способом, я не думал об этом?

+0

Я не уверен, что есть способ сохранить список прослушивателей событий, который является итерируемым, сохраняя его слабым (WeakMap/WeakSet не разрешает итерацию), но есть ли что-то особенное, что вы делаете с этим списком ? –

+0

Точно то, что я сказал: я строю список слушателей на мероприятие, не делая этих слушателей вечными. – Malvolio

+1

Просто любопытно: Какую архитектуру вы себе представляете? Кто держит ссылки на слушателей событий, сохраняет их в живых? Это не будет работать в текущих проектах, где прослушиватели событий выполняют побочные эффекты. – Bergi

ответ

12

Нет, невозможно использовать WeakMaps для создания слабой ссылки. WeakMaps не являются итерируемыми, для их использования вам всегда нужен ключ. Это было преднамеренное решение (также here), так что сбор мусора не влияет на семантику вашей программы - это именно то, что вы хотите.

Настоящие слабые ссылки могут поставляться с ES8, см. here и there для черновиков.