On Sep 17, 2014, at 10:15 AM, Andreas Rossberg wrote:

> On 17 September 2014 19:04, Brendan Eich <bren...@mozilla.org> wrote:
>> I agree with Domenic that any derived-class constructor that needs to
>> allocate with specific arguments *and* that must distinguish new'ing from
>> calling should have to write an if-else. That's a hard case, EIBTI, etc.
> 
> I agree. In fact, I don't see a reason to make it even that simple. My
> understanding was that there is wide agreement that invoking
> constructors without 'new' should be discouraged, and that functions
> behaving differently for Call and Construct are considered a legacy
> anti-pattern. In the light of that, I'm stilling missing the
> compelling reason to introduce new^ at all. In particular, since TDZ
> for `this` allows you to make the distinction fairly easily even
> without a new construct, if you are so inclined.

Boris covered the most important use case for this^.

The other one is self-hosting built-ins.  A lot of the cruft in the present ES6 
spec. is about making sure that things like this ES5 code:

     Date.prototype.foo = Date;
     console.log(typeof ((new Date()).foo()); //"string" according to ES5 spec.
     console.log(typeof( new Date()));           //"object" according to ES5 
spec.

can continue to work the same in a self-hosted implementation of Data. 
Basically, just looking at the this value isn't sufficient to distinguish there 
two case in the self hosted world.  It helps a lot when you have to do this 
sort of crap to have an reliable way for ES code l to distinguish if they were 
invoked via [[Call]] or [[Construct]].  Since we need to provide access to the 
original constructor (Boris point) it's a nice bonus that we can use the same 
mechanism to make that distinction in the (hopefully very rare) cases where it 
is actually needed.

Allen
   
     

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

Reply via email to