13

Ich versuche, die offensichtliche Sache mit WeakMaps zu tun: Ich möchte eine schwache Referenz erstellen. Insbesondere möchte ich eine Liste von Event-Listenern haben, ohne dass diese Liste das Leben des Zuhörers beeinflusst.Erstellen einer regulären Schwachstelle in Javascript mit WeakMaps

So war ich sehr aufgeregt, WeakMaps zu finden, bis ich sah, dass sie nur gebaut wurden, um einen (ziemlich seltenen) Anwendungsfall zu befriedigen, der Objekte erweitert, die sonst versiegelt wurden. Ich kann nicht denken, wann ich das jemals tun wollte, aber ich brauche ständig Listen von Zuhörern.

Ist es möglich, WeakMaps auf eine clevere Art und Weise zu verwenden, an die ich nicht gedacht habe?

+0

Ich bin mir nicht sicher, ob es eine Möglichkeit gibt, eine Liste von Ereignis-Listenern zu speichern, die iterierbar ist, während sie schwach bleibt (WeakMap/WeakSet erlaubt keine Iteration), aber gibt es etwas Bestimmtes, das Sie mit dieser Liste machen ? –

+0

Genau das, was ich gesagt habe: Ich baue eine Liste von Zuhörern für ein Ereignis auf, ohne diese Zuhörer ewig zu machen. – Malvolio

+1

Nur neugierig: Was für eine Architektur stellst du dir vor? Wer hält die Hinweise auf die Ereignishörer, hält sie am Leben? Dies würde in den aktuellen Designs, in denen Ereignislistener Nebenwirkungen ausführen, nicht funktionieren. – Bergi

Antwort

12

Nein, es ist nicht möglich, WeakMaps zu verwenden, um eine schwache Referenz zu erstellen. WeakMaps sind nicht iterierbar, um sie zu verwenden, benötigen Sie immer den Schlüssel. Dies war eine bewusste Entscheidung (auch here), so dass die Garbage Collection die Semantik Ihres Programms nicht beeinflusst - genau das, was Sie wollen.

Echte schwache Referenzen könnten mit ES8 kommen, siehe here und there für Entwürfe.

Verwandte Themen