David Bruant wrote:
var context =
document.getElementsByTagName('canvas')[0].getContext('2d');
// bikeshed syntax for binding destructuring, my point isn't about
syntax here
var #{beginPath: begin, moveTo, lineTo, stroke, closePath: end} =
context;
// extracted methods are bound to the context object.
The # was somewhat wanted for records, tuples, and const functions, once.
Appreciate that the # syntax is straw, so permit me to light the match.
The challenge is to put the |this| binding on the left-hand side,
without making the pattern language not be covered by the object and
array literal subgrammar or a plausible extension of it. One idea:
var {beginPath: begin, moveTo, lineTo, stroke, closePath:
end}.bind(context) = context;
In a binding or even lvalue context, this would make a special form
without adding syntax or reserving bind otherwise. It does require
repeating |context| on LHS where that occurs on the RHS, though.
For DRY, new syntax seems required. From
http://wiki.ecmascript.org/doku.php?id=strawman:bind_operator
we would write
var begin = ::context.beginPath;
to extract just one bound method reference.
(Note that :: was wanted for guards too, so its use here is straw of a
flammably dry kind. Note also that the grammar in the strawman under
"Syntax" is not complete.)
The equivalence between let foo = obj.bar; and let {bar: foo} = obj;
suggests
var {beginPath: begin, moveTo, lineTo, stroke, closePath: end} =
::context;
but this separates the :: on the RHS from the destructuring on the LHS.
Could we instead make :: part of the pattern language too? It would be
covered by the (corrected) grammar in Dave's bind operator proposal.
var ::{beginPath: begin, moveTo, lineTo, stroke, closePath: end} =
context;
Your wish to mix auto-bound and unbound method destructuring could be
met by:
var {unbound, ::bound} = object;
which could be written without destructuring, but with the bind operator
strawman, as
var unbound = object.unbound, bound = ::object.bound;
/be
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss