<div dir="ltr"><div><div><div><div><div><div>I tried posting this before, but it seems to have gotten lost on the internet.<br><br></div>One thing which is impossible to make in JavaScript today is a weakly referenced event listener system. In such a system an event listener is not strongly referenced by the event system, so events are only dispatched to it as long as another object holds a reference to it. For example:<br>

<br><span style="font-family:courier new,monospace"><br></span></div><span style="font-family:courier new,monospace">//some weak event system, could be global or created with constructor<br>var events = new WeakEventSystem();<br>

<br>(function(){<br>    //This object only exists inside this IIFE, not outside it<br>    var myObject = {<br>        handler: function(event){<br>            console.log("handle event: " + event);<br>        }<br>

    };<br><br>    //add a listener to events, but events only has a weak reference to it<br>    events.addEventListener("someEvent", myObject.handler);<br>    <br>    //the following causes the handler above to be called, resulting in output on the console<br>

    events.dispatchEvent("someEvent", {params:"someParams"});<br><br>})();<br><br>//myObject does not exist anymore<br>//the following does not output anything on the console<br>events.dispatchEvent("someEvent", {params:"someParams"});</span><br>

<br></div>In this example the event system does not hold a strong reference to the listener/handler function, so if nothing else has a reference to the handler function, it is garbage collected. <br></div><br></div>Any thoughts on this, as an alternative to the more general (and low level) weak references?<br>

<br></div>Marius Gundersen<br></div>