Optional assignment operator
Jacob Pratt
jhprattdev at gmail.com
Thu Jul 5 00:41:58 UTC 2018
Sure, you'd be making an assignment no matter what in that case, which
would unnecessarily trigger the setter, possibly causing side effects.
```
const obj = {
get x() {
return _x;
},
set x(value) {
console.log('setter called');
_x = value;
},
demo(params = {}) {
({ x: this.x = this.x } = params);
},
};
obj.demo({ x: 5 });
obj.demo({ x: undefined });
```
This will log twice, where it only needs to trigger it once.
jhpratt
On Wed, Jul 4, 2018 at 8:16 PM, Darien Valentine <valentinium at gmail.com>
wrote:
> > My thought was to have the following: this.foo ?= params?.foo; which can
> be desugared to if (($ref = params?.foo) !== undefined) { this.foo = $ref; }
>
> 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 — default initializers and binding patterns allow
> expressing the same logic:
>
> ```
> const obj = {
> demo(params={}) {
> ({ foo: this.foo=this.foo } = params);
>
> console.log(
> `params was ${ JSON.stringify(params) }; ` +
> `this.foo is now ${ JSON.stringify(this.foo) }`
> );
> }
> }
>
> obj.demo({ foo: 1 });
> obj.demo({})
> obj.demo({ foo: 2 });
> obj.demo();
> obj.demo({ foo: 3 });
> obj.demo({});
> ```
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20180704/1a900c7d/attachment.html>
More information about the es-discuss
mailing list