13

Próbuję zrobić oczywiste rzeczą oczywistą z WeakMaps: Chcę utworzyć słabe odniesienie. W szczególności chcę mieć listę osób, które nie mają listy, która wpłynie na życie słuchacza.Tworzenie regularnego słabego odniesienia w JavaScript przy użyciu WeakMaps

Byłem bardzo podekscytowany tym, że znalazłem WeakMaps, dopóki nie zobaczyłem, że zostały zbudowane tylko w celu zaspokojenia jednego (dość rzadkiego) przypadku użycia, rozszerzając obiekty, które w przeciwnym razie były zapieczętowane. Nie mogę myśleć, kiedy kiedykolwiek chciałem to zrobić, ale potrzebuję list słuchaczy cały czas.

Czy można w taki sprytny sposób używać Słabych Map, o których nie myślałem?

+0

Nie jestem pewien, czy istnieje sposób na zapisanie listy detektorów zdarzeń, która jest iterowalna, przy jednoczesnym zachowaniu jej słabości (WeakMap/WeakSet nie pozwala na iterację), ale czy jest coś szczególnego, co robisz z tą listą ? –

+0

Dokładnie to, co powiedziałem: buduję listę słuchaczy wydarzenia, nie czyniąc tych słuchaczy wiecznymi. – Malvolio

+1

Po prostu ciekawy: Jakiego rodzaju architekturę sobie wyobrażasz? Kto trzyma referencje do słuchaczy wydarzeń, utrzymuje je przy życiu? Nie działałoby to w obecnych projektach, w których detektory zdarzeń wykonują efekty uboczne. – Bergi

Odpowiedz

12

Nie, nie można użyć Słabej mapy do utworzenia słabego odniesienia. WeakMaps nie są iterowalne, aby ich użyć zawsze potrzebujesz klucza. To była przemyślana decyzja (także here), więc odśmiecanie nie ma wpływu na semantykę twojego programu - właśnie tego chcesz.

Prawdziwe słabe referencje mogą pochodzić z ES8, zobacz here i there dla wersji roboczych.