Use cases for WeakMap
David Bruant
david.bruant at labri.fr
Sat May 14 15:25:48 PDT 2011
Le 15/05/2011 00:05, Oliver Hunt a écrit :
> The more I read the WeakMap spec, the more it seems to prevent the common use cases I know of.
What are the use cases you know of? How are they prevented by the
current spec?
> Could someone give a few examples of problems the current weakmap spec solves?
In my opinion, having a key->value map indexed on object identities
which has O(log(n)) lookup is a win by itself. Weakness is a plus.
I don't know if it's a problem, but WeakMaps with getters/setters allow
a form of inheritance that has not really been possible before (it was
with getter/setters and arrays, but with almost unavoidable memory leaks).
----
var o = {};
(function(){
var wm = WeakMap();
function get(){
return wm.get(this);
}
function set(val){
wm.set(this, val);
}
Object.defineProperty(o, "a", {get:get, set:set});
})();
var oo = Object.create(o);
oo.a = 1;
var oo2 = Object.create(o);
oo2.a = 2;
console.log(oo.a); // 1;
console.log(oo2.a); // 2
// but still:
console.log(Object.getOwnPropertyDescriptor(oo, "a")); // undefined
console.log(Object.getOwnPropertyDescriptor(oo2, "a")); // undefined
// On FF nightly, this is not undefined, but I'd say it's due to
https://bugzilla.mozilla.org/show_bug.cgi?id=636989
----
Other may disagree, but I like this pattern, because it keeps properties
"at the layer they belong to" rather than making the own layer a messy bag.
David
More information about the es-discuss
mailing list