[argh, unhelpful hidden key-combo led to premature send]
But it also made me realize that by default, destructuring returns
unbound methods. It's perfect for the above use case, but may be
annoying when you wish to extract functions bound to the object
they're extracted from:
var o = {a:1, f: function(){return this.a;}};
var {f} = o;
f(); // throw
Agreed that this is an obstacle. With operators, one could have a
convenient binding selection, but the destructuring case needs a
separate solution.
// bikeshed syntax for binding destructuring,
var #{beginPath: begin, moveTo, lineTo, stroke,
closePath: end} = context;
// extracted methods are bound to the context object.
This version, I have issues with: not all items need to be bound,
so we'd need syntax for subpatterns. In this example, all of the
bound items are going to be bound to the same context, and
that context is on the right hand side, so perhaps we need to
do something there? Perhaps
let bind_methods = obj =>
Proxy(obj,{get(t,n,r) {
let prop = t[n];
return prop instanceof Function ? prop.bind(t) : prop }
});
var {beginPath: begin, moveTo, lineTo, stroke, closePath: end} =
bind_methods(context);
Of course, that won't work if we need binding destructuring
from sub-objects.
Claus
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss