Rick Waldron (2014-06-11T15:04:28.000Z)
Quick note: that isConstructor isn't really viable unless you plan on using
it with constructors that do not have side effects.

Rick


On Wed, Jun 11, 2014 at 10:58 AM, Rick Waldron <waldron.rick at gmail.com>
wrote:

>
>
>
> On Wed, Jun 11, 2014 at 10:24 AM, Domenic Denicola <
> domenic at domenicdenicola.com> wrote:
>
>> A variety of places in the spec use the new IsConstructor abstract
>> operation. In ES5, this test (essentially, "does the object implement the
>> [[Construct]] internal method") was restricted to the `new` operator. But
>> in ES6, it is used in implementing a large variety of built-in functions:
>>
>> - All Array methods
>> - All %TypedArray% methods
>> - All Promise methods (via NewPromiseCapability)
>>
>> (Note that there are two uses: arrays and typed arrays do alternative
>> logic for non-constructors; promises fail immediately. This inconsistency
>> might be a bug?)
>>
>> It seems to me that we should expose this primitive reflective operation
>> to users, instead of having all of these methods be able to detect
>> something that user code can't, and thus making them harder to explain or
>> polyfill.
>
>
>> Alternately, if we don't think users should be doing this kind of
>> reflection, then we probably shouldn't be doing it ourselves. In which
>> case, figuring out an alternate path for the above methods would be
>> useful---perhaps they simply try to construct, and fail immediately if used
>> with a non-constructible object, instead of falling back.
>>
>
> I had similar questions a couple years ago and Allen advised that the
> easiest polyfill for such a mechanism is:
>
> function isConstructor(C) {
>   try {
>     new C();
>     return true;
>   } catch (e) {
>     return false;
>   }
> }
>
>
> Additionally, at the July 2012 tc39 meeting I proposed (over breakfast) an
> ES7 "standard library module" that exported the abstract operations that
> are now defined in chapter 7
> http://people.mozilla.org/~jorendorff/es6-draft.html#sec-abstract-operations,
> the response was positive but it was far too early to have a serious
> discussion. Anyway, with that you'd just write:
>
> import { isConstructor } from "es-abstract";
>
>
> Rick
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20140611/3e459940/attachment-0001.html>
domenic at domenicdenicola.com (2014-06-20T19:22:42.380Z)
Quick note: that `isConstructor` isn't really viable unless you plan on using
it with constructors that do not have side effects.