ES6 classes: deferring the creation step

Claude Pache claude.pache at
Wed Jul 16 15:52:15 PDT 2014

(Sorry for the delay of response, I am currently in a remote area.)

Le 7 juil. 2014 à 19:02, Kevin Smith <zenparsing at> a écrit :

>> 1.  During phase /* 1 */, the this-binding is uninitialised; trying to access
>>     it through an explicit `this` keyword will throw a ReferenceError.
> This seems overly restrictive to me.   The common case (as in ES5) will be classes that derive from Object, where no such restriction is necessary.

(To be more precise, the intended restriction is a TDZ, just like `const` declarations.)

There are trade-offs that should be made. Are there many cases where you want to manipulate `this` before calling `super`?

> The crux of the problem is that some host-defined classes that cannot safely separate object allocation from initialization.  What if the @@create hook was allowed to return undefined?  In such a case, your "uninitialized" semantics would apply:  attempting to dereference "this" before calling super(...) would throw an error, and super(...) would essentially set the "this" value?  In all other cases, the currently drafted semantics would apply.

One feature of the proposal is that the first call to `super` invokes the constructor with the semantics of [[Construct]] rather than [[Call]], so that subclassing classes that have different construct/call behaviour would just work. It implies that there is no preliminary creation step. 


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list