<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Jun 11, 2014 at 1:37 PM, Domenic Denicola <span dir="ltr"><<a href="mailto:domenic@domenicdenicola.com" target="_blank">domenic@domenicdenicola.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">It's also deceptive: it makes you think `Array.of` and `Array.from` are functions, when in reality they are definitely methods.<br>

</blockquote><div><br></div><div>Yes, you're right.</div><div><br></div><div><br></div><div>What about Array subclasses? `from` and `of` are "inherited" when Array is subclassed, so these: </div><div><br></div>

<div><div>22.1.2.3 4 & 5 (<a href="http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.of">http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.of</a>)</div><div>22.1.2.1 8.a & 8.b (<a href="http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.from">http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.from</a>)</div>

<div>22.1.2.1 13 & 14 </div></div><div><br></div><div>Which are are how `from` and `of` determine what to construct, will be replaced with a single step, being one of:</div><div><br></div><div>Let A be the result of calling the [[Construct]] internal method of C with an empty argument list.</div>

<div>Let A be the result of calling the [[Construct]] internal method of C with an argument list containing the single item len.<br></div><div><br></div><div>But surely this step will also have to be guarded by IsCallable(this), which that means this: </div>

<div><br></div><div><div>If IsConstructor(C) is true, then</div><div>  Let A be the result of calling the [[Construct]] internal method of C with an empty argument list.</div><div>Else,</div><div>  Let A be ArrayCreate(0).</div>

<div><br></div><div>Becomes: <br></div><div><br></div><div>If IsCallable(C) is true, then</div><div>  Let A be the result of calling the [[Construct]] internal method of C with an empty argument list.</div><div>Else,</div>

<div>  Let A be ArrayCreate(0).</div><div><br></div><div><br></div></div><div>Or maybe that's not necessary? Is it preferable to just throw when someone writes any of these:</div><div><br></div><div>let of = Array.of;<br>

</div><div>of(1,2,3,4);</div><div><br></div><div>let from = Array.from;</div><div>from(arrayLikeOrIterable);</div><div><br></div><div>let List = {</div><div>  of: Array.of</div><div>};</div><div><br></div><div>List.of(1, 2, 3, 4);</div>

<div><br></div><div>(Note that `Array.isArray` doesn't cease to work correctly when aliased)<br></div><div><br></div><div>With the IsConstructor or IsCallable guard, these "just work"; without any guard, they'll throw TypeError exceptions: "object is not a function" or "undefined is not a function" (in strict mode). Neither of these errors are very obvious. Of course this can all be fixed with .bind() or a "bind" operator, but it just seems unfortunate to throw out something that's not harming the spec in favor something that might be problematic in end user code.</div>

<div><br></div><div><br></div><div>Rick</div><div><br></div></div></div></div>