How to fix the `class` keyword

Allen Wirfs-Brock allen at wirfs-brock.com
Wed Mar 4 22:51:53 UTC 2015


On Mar 4, 2015, at 1:50 PM, Matthew Robb wrote:

> 
> On Wed, Mar 4, 2015 at 2:29 PM, Kevin Smith <zenparsing at gmail.com> wrote:
> In order to allow subclassing as built-ins, we had to opt for the builtin model.
> 
> ​Help me make sure I am understanding correctly. This decision doe​s not help in making DOM subclassable. It doesn't simply or easily integrate into all the existing and somewhat common OOP patterns in user land. What built-ins are we talking about then? The decision to fork things here seems MOSTLY motivated by a desire to support `class extends Array{}`... Am I crazy? If not.... There had to be a better way.

Actually this decision really had nothing to do with subclassing built-ins or anything else. It just was made as part of the set of changes related to subclassing.  In fact, the updated subclassing design provides an new reliable way for a function body to distinguish whether it was  invoked using [[Call]] or [[Construct]].

The main reason we disabled [[Call]] invocation of class constructors was because some TC39 member are interested in possibly providing an enhanced semantics  for [[Call]] invocation   of class constructors. Making such calls illegal in ES6 leaves room for considering such enhancements that would otherwise have been precluded.  One of those possible enhancement that has been talked about is to implicitly treat a [[Call]] of a class constructor as an implicit 'new', just like you are suggesting.

> 
> On the issue of calling class constructors, I would AT LEAST have preferred implicit new on all calls to class constructors. Sure you might get extra allocation weight but the way it stands now seems like it could only lead to errors in people's assumptions... Assumptions people have built up in their experience using the language and that are not only safe TODAY but considered best practice.

Not sure what assumptions you are referring to.   [[Call]] invocation of ECMAScript functions have never done an automatic allocation so doing so could not be conforming to anybodies existing assumptions.

Allen
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20150304/60e40afc/attachment-0001.html>


More information about the es-discuss mailing list