Feature-Request: allow to iterate over WeakSet / WeakMap
Michael Kriegel
michael.kriegel at actifsource.com
Wed Jul 13 12:13:11 UTC 2016
Hi everyone,
not sure, whether this is the right place for discussing a feature
request - and how to find out, whether this was already
proposed/discussed before and with which result... My google search did
not bring up anything about it.
On my opinion it should be made possible to iterate over all elements in
a WeakSet & WeakMap. I already found many cases, in which I'd like to
have used the neat feature of "garbage collect the object, if it is not
referred to by others anymore", but with the necessity to know, which
objects are in the set (not only, if a given object is). An example:
Registering callbacks to objects:
class Foo {
onBla(Handler) {
this.BlaSuperWeakMap.push(Handler);
}
someOtherMethod() {
for (let X in this.BlaSuperWeakMap) {
X();
}
}
constructor() {
this.BlaSuperWeakMap = new SuperWeakMap();
}
}
const MyFoo = new Foo();
{
let MyHandler1 = function(){
console.log('MyHandler1 called');
};
MyFoo.onBla(MyHandler1);
console.log('Invokation1:');
MyFoo.someOtherMethod();
}
let MyHandler2 = function(){
console.log('MyHandler2 called');
};
MyFoo.onBla(MyHandler2);
MyFoo.onBla(function(){
console.log('MyHandler3 called');
});
console.log('Invokation2:');
MyFoo.someOtherMethod();
MyHandler2 = undefined;
console.log('Invokation3:');
MyFoo.someOtherMethod();
Expected result:
Invokation1:
MyHandler1 called
Invokation2:
MyHandler2 called
Invokation3:
Basically the example is: Invoke the callback of all objects which still
"exist" (in the meaning of having "non-weak" references towards them).
I know this may have some caveats. It would be necessary to check the
reference count of the object in the SuperWeakSet, because the object
may have no "non-weak" references left but still was not yet garbage
collected. I do not know, whether current ECMAScript-Implementations and
their garbage collecting solutions could handle this easily - basically
it is the same decision, which the garbage collector would make: If an
object can be disposed, because it has no non-Weak references pointing
to it, the object is by definition not in the WeakSet anymore. And
implementations could in that case even give a hint to the garbage
collector, which may improve performance of applications, which use the
SuperWeakSet alot.
Greetings, Michael
More information about the es-discuss
mailing list