<div dir="ltr">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?</div><br><div class="gmail_quote"><div dir="ltr">On Sat, Mar 18, 2017 at 2:05 PM Jordan Harband <<a href="mailto:ljharb@gmail.com">ljharb@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg">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?<div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Perhaps this:</div><div class="gmail_msg">```js</div><div class="gmail_msg">class Foo {</div><div class="gmail_msg">  constructor(#x, #y) { }</div><div class="gmail_msg">}</div><div class="gmail_msg">```</div></div><div class="gmail_extra gmail_msg"><br class="gmail_msg"><div class="gmail_quote gmail_msg">On Sat, Mar 18, 2017 at 11:00 AM, just nobody <span dir="ltr" class="gmail_msg"><<a href="mailto:kingdaro@gmail.com" class="gmail_msg" target="_blank">kingdaro@gmail.com</a>></span> wrote:<br class="gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg">Inherited methods would inherit the same behavior, since this is just syntactic sugar after all.<div class="gmail_msg">```js</div><div class="gmail_msg"><div class="gmail_msg">class Point {</div><div class="gmail_msg">  setPosition(this.x, this.y) {}</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">  // same as</div><div class="gmail_msg">  // setPosition(x, y) { this.x = x; this.y = y }</div><div class="gmail_msg">}</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">class Rectangle extends Point {</div><div class="gmail_msg">  setSize(this.width, this.height) {}</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">  // same as</div><div class="gmail_msg">  // setSize(width, height) { this.width = width; this.height = height }</div><div class="gmail_msg">}</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">let rect = new Rectangle()</div><div class="gmail_msg">rect.setPosition(0, 0)</div><div class="gmail_msg">rect.setSize(50, 50)</div><div class="gmail_msg">rect // { x: 0, y: 0, width: 50, height: 50 }</div></div><div class="gmail_msg">```</div></div><div class="m_-4012524061793785153HOEnZb gmail_msg"><div class="m_-4012524061793785153h5 gmail_msg"><br class="gmail_msg"><div class="gmail_quote gmail_msg"><div dir="ltr" class="gmail_msg">On Sat, Mar 18, 2017 at 7:12 AM Michael J. Ryan <<a href="mailto:tracker1@gmail.com" class="gmail_msg" target="_blank">tracker1@gmail.com</a>> wrote:<br class="gmail_msg"></div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto" class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">Interesting concept... What about inheritance?<br class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"><div data-smartmail="gmail_signature" class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"><br class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">-- <br class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">Michael J. Ryan - <a href="mailto:tracker1@gmail.com" class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg" target="_blank">tracker1@gmail.com</a> - <a href="http://tracker1.info" class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg" target="_blank">http://tracker1.info</a><br class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"><br class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">Please excuse grammar errors and typos, as this message was sent from my phone.</div></div><div class="gmail_extra m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"><br class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"><div class="gmail_quote m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"></div></div><div class="gmail_extra m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"><div class="gmail_quote m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">On Mar 18, 2017 12:03 AM, "just nobody" <<a href="mailto:kingdaro@gmail.com" class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg" target="_blank">kingdaro@gmail.com</a>> wrote:<br type="attribution" class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"></div></div><div class="gmail_extra m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"><div class="gmail_quote m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"><blockquote class="gmail_quote m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"><span style="color:rgb(33,33,33);font-size:13px" class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">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.</span><div class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"><font color="#212121" class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"><br class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"></font><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg" style="color:rgb(33,33,33);font-size:13px">```js<div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">class Rectangle {</div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">  constructor (this.x, this.y, this.width, this.height) {}</div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">  setPosition(this.x, this.y) {}</div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">  setSize(this.width, this.height) {}</div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">}</div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"><br class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"></div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">// equivalent to</div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">class Rectangle {</div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">  constructor (x, y, width, height) {</div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">    this.x = x</div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">    this.y = y</div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">    this.width = width</div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">    this.height = height</div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">  }</div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"><br class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"></div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">  // ...</div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">}</div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"><br class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"></div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">// for regular constructor functions as well</div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">function Rectangle (this.x, this.y, this.width, this.height) {}</div></div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">```</div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"><br class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"></div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">Deconstructing and argument defaults should all work similarly<br class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">```js</div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">function Point({ x: this.x, y: this.y }) {}</div>function Point(this.x = 0, this.y = 0) {}</div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg" style="color:rgb(33,33,33);font-size:13px">function Point([this.x, this.y]) {}<br class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">```</div><div class="m_-4012524061793785153m_741402677829774241m_-2769454070288049578m_7749388589341434464gmail_msg m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"><br class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"></div></div></div></div>
<br class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"></blockquote></div></div><div class="gmail_extra m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"><div class="gmail_quote m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"><blockquote class="gmail_quote m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">_______________________________________________<br class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">
es-discuss mailing list<br class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">
<a href="mailto:es-discuss@mozilla.org" class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg" target="_blank">es-discuss@mozilla.org</a><br class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg">
<br class="m_-4012524061793785153m_741402677829774241gmail_msg gmail_msg"></blockquote></div></div>
</blockquote></div>
</div></div><br class="gmail_msg">_______________________________________________<br class="gmail_msg">
es-discuss mailing list<br class="gmail_msg">
<a href="mailto:es-discuss@mozilla.org" class="gmail_msg" target="_blank">es-discuss@mozilla.org</a><br class="gmail_msg">
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" class="gmail_msg" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br class="gmail_msg">
<br class="gmail_msg"></blockquote></div><br class="gmail_msg"></div>
</blockquote></div>