<div dir="ltr"><div>Sure, you'd be making an assignment no matter what in that case, which would unnecessarily trigger the setter, possibly causing side effects.</div><div><br></div><div>```</div><div>const obj = {<br>  get x() {<br>    return _x;<br>  },<br>  <br>  set x(value) {<br>    console.log('setter called');<br>    _x = value;<br>  },<br><br>  demo(params = {}) {<br>    ({ x: this.x = this.x } = params);<br>  },<br>};<br><br>obj.demo({ x: 5 });<br>obj.demo({ x: undefined });<br>```</div><div><br></div><div>This will log twice, where it only needs to trigger it once.<br></div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">jhpratt</div></div></div>
<br><div class="gmail_quote">On Wed, Jul 4, 2018 at 8:16 PM, Darien Valentine <span dir="ltr"><<a href="mailto:valentinium@gmail.com" target="_blank">valentinium@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><span class="">> My thought was to have the following:
this.foo ?= params?.foo;
which can be desugared to
if (($ref = params?.foo) !== undefined) { this.foo = $ref; }<div><br></div></span><div><span style="background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">Are there any specific advantages to the new syntax you’re describing? Initially, it appears to me like a less powerful form of an existing syntactic feature — <span style="text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">default initializers and binding patterns allow expressing the same logic:</span></span></div><div><br></div><div>```</div><div><div>const obj = {</div><div>  demo(params={}) {</div><div>    ({ foo: this.foo=this.foo } = params);</div><div><br></div><div>    console.log(</div><div>      `params was ${ JSON.stringify(params) }; ` +</div><div>      `this.foo is now ${ JSON.stringify(this.foo) }`</div><div>    );</div><div>  }</div><div>}</div><div><br></div><div>obj.demo({ foo: 1 });</div><div>obj.demo({})</div><div>obj.demo({ foo: 2 });</div><div>obj.demo();</div><div>obj.demo({ foo: 3 });</div><div>obj.demo({});</div></div><div>```</div></div>
<br>______________________________<wbr>_________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/<wbr>listinfo/es-discuss</a><br>
<br></blockquote></div><br></div>