<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>On Nov 20, 2011, at 8:12 AM, Rick Waldron wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div bgcolor="#FFFFFF"><div>Ah, yes and agreed. That was definitely not relayed in the message below- thanks for the clarification, the context does make a difference.<br></div></div></blockquote><div><br></div>Destructuring parameters + default values really shine here:</div><div><br></div><div><font class="Apple-style-span" face="Courier">  function frob(arg1, arg2, {foo = defFoo, bar = defBar, baz = defBaz}) {</font></div><div><font class="Apple-style-span" face="Courier">    // just use foo, bar, and baz instead of ops.foo, etc.</font></div><div><font class="Apple-style-span" face="Courier">  }</font></div><div><br></div><div>instead of the song and dance cited below.</div><div><br></div><div>/be</div><div><br></div><div><br></div><div><br><blockquote type="cite"><div bgcolor="#FFFFFF"><div><br>Rick</div><div><br>On Nov 20, 2011, at 1:40 AM, David Herman <<a href="mailto:dherman@mozilla.com">dherman@mozilla.com</a>> wrote:<br><br></div><div></div><blockquote type="cite"><div><div><div>On Nov 19, 2011, at 5:50 PM, Brendan Eich wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>On Nov 19, 2011, at 2:20 PM, Rick Waldron wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; position: static; z-index: auto; "><div><div>Q. We don't use option parameter like that in JS (see previous point for actual example)</div>

</div></blockquote><div><br></div><div>Using an object-as-option parameter is a very common API design pattern in real-world JavaScript today - why anyone would say otherwise is confounding. </div></div></blockquote><br></div><div>Right. For example, ES5's property descriptor and property descriptor map parameters.</div></div></blockquote><br></div><div><div>It was me. I didn't say JS doesn't use options objects. I said the G11n library was using them wrong. They were doing:</div><div><br></div><div>    if (!ops) {</div><div>        ops = { foo: defFoo, bar: defBar, baz: defBaz };</div><div>    }</div><div><br></div><div>instead of e.g.:</div><div><br></div><div>    if (!ops)</div><div>        ops = {};</div><div>    if (typeof ops.foo === "undefined")</div><div>        ops.foo = defFoo;</div><div>    if (typeof ops.bar === "undefined")</div><div>        ops.bar = defBar;</div><div>    if (typeof ops.baz === "undefined")</div><div>        ops.baz = defBaz;</div><div><br></div><div>IOW, it shouldn't be all or nothing, but rather each property of the options object is separately optional.</div><div><br></div><div>Dave</div><div><br></div></div></div></blockquote></div></blockquote></div><br></body></html>