ES6 destructuring syntax isn't very readable and useful, especially for assigning to properties of existing object:
// ES6
({
a: target.a,
b: target.b,
c: target.c,
} = srcObject);
// Versus ES3
target.a = srcObject.a;
target.b = srcObject.b;
target.c = srcObject.c;
There is no reasons to start using new ES6 destructuring syntax now, old syntax is better, because:
- there is hard to assume that `target` object will be modified, if developer does not familar with new standart
- identifiers are still duplicated
- you should write braces `()` or use other solution, because JS statement cannot starts with `{`
# Proposal
So, in addition to current ES6 syntax, I want to propose this sugar:
target.{a,b,c} = srcObject
//alternative// target.* = srcObject{a,b,c}
## Why?
+ This syntax is more clear and understandable:
even without ES6 knowleges, developer can assume that some properties assigned to the left-side `target` from a right-side `srcObject` variable.
+ The one of destructuring goal is met: full elimination of identifiers duplication.
+ You can omit braces `()` because JS statement doesn't starts with `{` now.
#### New syntax for Object.assign()
let target = {a:0}
target.* = {b:1, c:2}
//alternative// target.{} = ...
console.log(target) // {a:0, b:1, c:2}
Useful for:
+ adding properties to the `this` object in constructor
+ adding methods to the prototype of class
#### Extracting properties into local variables
let * = {a:1, b:2} // like import * from 'module'
console.log(a, b) // 1 2
GitHub Repo:
https://github.com/transpiling/destructuring-into-object
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

