Le 06/01/2012 12:23, Andrea Giammarchi a écrit :
it doesn't ... as soon as you release the reference to o no leaks persists but of course until you keep o on hold those unique callbacks cannot be released ...
If you're telling me that keeping only one of the object or the function alive but not both keeps the bound function alive, then you do have a leak. The bound function only has a reason to exist if both the object and the function remain in the program.


but this would be true with WeakMap too, isn't it?
No it wouldn't. Since WeakMaps keep weak references, you can't have the type of leaks I just described. As I said in [1], the bound function will be kept in memory only if both the object and the function are still strongly held somewhere (so the weakmap doesn't count).


In any case, boundTo is suitable for listeners and the whole point is to do not hold manually those function

once again

window.addEventListener("whatever", o.boundTo(o.method), false);
// later on
window.removeEventListener("whatever", o.boundTo(o.method), false);
// that's it

We can reuse/add the listener later on without problems but as soon as object "o" will be unreachable (no reference count === 0)
"Reference count === 0" and "unreachable" are different properties.
An object can be unreachable even with a reference count different of 0.


everything will be fine

This, versus this anti pattern

o._leMethodBound = o.method.bind(o);
window.addEventListener("whatever", o._leMethodBound, false);
// later on
window.removeEventListener("whatever", o._leMethodBound, false);

o._leMethodBound is exposed
only because of your implementation.

and used only to hold a bound method ... we have all done this until now, and to me it's kinda illogical, boring, error prone
I fully agree with your use case. Yet, you still haven't answered my question: If browsers implemented your proposal, it would certainly be in new versions that will certainly already have WeakMaps built-in. In this case, what would be the benefit of a native implementation rather than a library of yours?

Regarding your earlier argument about 'bind' being often implemented in libraries, it has to be noted that ES5 version of bind has features that ES3-based polyfill cannot emulate including being safe against redefinition of 'call' and 'apply'.

David

[1] https://mail.mozilla.org/pipermail/es-discuss/2012-January/019306.html
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to