I usually just use Classes and constructor functions for simple data structures. Only allowing this for private fields seems counter-intuitive to that. Why not both?
On Sat, Mar 18, 2017 at 2:05 PM Jordan Harband <[email protected]> wrote: > I'd think with the advent of private fields a much more common (and > better) use case would not involve creating publicly visible properties - > how might that work? > > Perhaps this: > ```js > class Foo { > constructor(#x, #y) { } > } > ``` > > On Sat, Mar 18, 2017 at 11:00 AM, just nobody <[email protected]> wrote: > > Inherited methods would inherit the same behavior, since this is just > syntactic sugar after all. > ```js > class Point { > setPosition(this.x, this.y) {} > > // same as > // setPosition(x, y) { this.x = x; this.y = y } > } > > class Rectangle extends Point { > setSize(this.width, this.height) {} > > // same as > // setSize(width, height) { this.width = width; this.height = height } > } > > let rect = new Rectangle() > rect.setPosition(0, 0) > rect.setSize(50, 50) > rect // { x: 0, y: 0, width: 50, height: 50 } > ``` > > On Sat, Mar 18, 2017 at 7:12 AM Michael J. Ryan <[email protected]> > wrote: > > Interesting concept... What about inheritance? > > -- > Michael J. Ryan - [email protected] - http://tracker1.info > > Please excuse grammar errors and typos, as this message was sent from my > phone. > > On Mar 18, 2017 12:03 AM, "just nobody" <[email protected]> wrote: > > Would it be possible to have syntax like this? It's a feature supported by > other JS variants in some way (CoffeeScript, TS) that feels missing from > the spec. It's mainly useful as a convenient, terse way of setting > properties of an object on initialization. > > ```js > class Rectangle { > constructor (this.x, this.y, this.width, this.height) {} > setPosition(this.x, this.y) {} > setSize(this.width, this.height) {} > } > > // equivalent to > class Rectangle { > constructor (x, y, width, height) { > this.x = x > this.y = y > this.width = width > this.height = height > } > > // ... > } > > // for regular constructor functions as well > function Rectangle (this.x, this.y, this.width, this.height) {} > ``` > > Deconstructing and argument defaults should all work similarly > ```js > function Point({ x: this.x, y: this.y }) {} > function Point(this.x = 0, this.y = 0) {} > function Point([this.x, this.y]) {} > ``` > > > _______________________________________________ > es-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es-discuss > > > _______________________________________________ > es-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es-discuss > > >
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

