It doesn’t seem that big of a deal, but one risk is: people mistaking a class 
for a constructor, trying to subclass it as if it were a constructor and things 
failing silently.



> On 30 Mar 2015, at 07:49, Allen Wirfs-Brock <al...@wirfs-brock.com> wrote:
> 
> 
>> On Mar 29, 2015, at 11:51 PM, Caitlin Potter <caitpotte...@gmail.com> wrote:
>> 
>> ...
>> 
>> Reflect.isConstructor(fn) -> true if Class constructor, generator, or legacy 
>> (and non-builtin) function syntactic form
>> Reflect.isCallable(fn) -> true for pretty much any function, except for 
>> class constructors and a few builtins
> 
> I’ve already seen another situation (node’s Buffer) where code could be 
> simplified by using a ES6 class definition but where that is prevented 
> because a class constructor throws when called.
> 
> Just to clarify something.  Class constructors actually are “callable”.  You 
> can observe this by the fact that Proxy allows you to install an “apply” 
> handler (the reification of the [[[Call]] internal method) on a class 
> constructor.   The the fact that an object can be [[Call]]’ed is already 
> reflected  by the typeof operator.  Class constructors throw when called 
> because at the last minute we choose to make their [[Call]] do an explicit 
> throw not because they aren’t callable.
> 
> There is no intrinsic reason why we needed to mandate that class constructors 
> should throw when called.  We even provided a simple and straight forward way 
> (new.target===undefined) that a ES constructor body can use to determine 
> whether it was called or new’ed.  
> 
> I think we should just drop that throws when called feature of class 
> constructors..
> 
> (The restriction was added to future proof for the possibility of inventing 
> some other way to provide a class with distinct new/call behavior. I don’t 
> think we need nor can afford to wait for the invention of a new mechanism 
> which will inevitably be more complex than new.target, which we already have.)
> 
> Allen
> 
> 
> _______________________________________________
> es-discuss mailing list
> es-discuss@mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss

-- 
Dr. Axel Rauschmayer
a...@rauschma.de
rauschma.de



_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to