On Sep 11, 2014, at 11:39 PM, Jeff Morrison wrote:

> " If a constructor body contains an assignment of the form this = then 
> automatic allocation is not performed and the constructor is expected to 
> perform manual allocation."
> If I'm understanding this correctly, this means that snippet (A) would never 
> have access to `this`, but snippet (B) would have an implicit `this` binding 
> -- is that correct?
> 
> (A)
> ```
> class Foo extends Bar {
>   constructor() {
>     if (false) {
>       this = super();
>     }
>     this; // undefined
>   }
> }
> ```
> 
> (B)
> ```
> class Foo extends Bar {
>   constructor() {
>     // No call to `this =` present in the constructor 
>     this; // the automatically allocated object -- i.e. this !== undefined
>   }
> }
> ```
> 
> If this is the case, it occurs to me that it would raise issues for things 
> like automated refactoring and/or dead code elimination (as a minifier might 
> do).
> Normally a minifier (or even a human) would expect to be able to eliminate 
> the entire conditional altogether if they were confident the condition never 
> evaluated to true. But with this static pre-check acting as the indicator for 
> whether automatic allocation/binding should happen, doing so would cause the 
> constructor to act very unexpectedly differently in the two cases.
> 
> I wish I could suggest an alternative, but nothing comes to mind right now.

First a minor but technically important point:  `this` in (A) above is/isn't 
uninitialized rather than not having/having the value undefined. 

Good overall point , tools that eliminate dead code will need to be aware of 
the significant of `this =`.

Arguably, this is a point in favor of alternative two (no auto allocation).

Another possibility that we've considered is to tag non-auto-allocating 
constructors in their declaration header  For example:

constructor() new {...}

function foo() new {...}

But, overall, we were trying to minimize syntactic embellishments and 
bikesheding opportunities. 

Allen

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

Reply via email to