Claude Pache (2014-02-03T18:22:56.000Z)
Le 2 févr. 2014 à 23:27, Allen Wirfs-Brock <allen at wirfs-brock.com> a écrit :

> I made the change in rev 22 to make the default constructor: return super(...args)
> 
> However that resulted in this bug: https://bugs.ecmascript.org/show_bug.cgi?id=2491 from Arv:
> 
>> The problem arises when we extend an old school "class" where the code does not
>> explicitly set constructor.
>> 
>> function B() {}
>> B.prototype = { ... }
>> class C extends B {}
>> new C() instanceof C  // false
>> 
>> The reason why this fails is that `B.prototype.constructor === Object` so `new
>> C()` returns `Object()`.
>> 
>> The work around is to set `B.prototype.constructor = B` but I feel like the
>> problem, adding return added solved, is smaller than the problem it introduces.
> 
> I'm inclined to agree with Arv's conclusion.  What do you think?
> 
> Allen


I think that this bug is indeed  a good reason to use `super(...arguments)` instead of `return super(...arguments)`.

However, I am slightly worried that, with the ES6 class syntax, the `constructor` method looks like a regular method, but it behaves differently w.r.t. inheritance. So, nonstandard uses of this method (wmay mysteriously fail when used on a super-class.

Therefore, it would be nice if `return expression` would be statically forbidden in the `constructor` method when defined using the `class` syntax (but a bare `return` is fine, which slightly complicates the grammar).

—Claude
domenic at domenicdenicola.com (2014-02-05T19:42:41.905Z)
Le 2 févr. 2014 à 23:27, Allen Wirfs-Brock <allen at wirfs-brock.com> a écrit :

> I'm inclined to agree with Arv's conclusion.  What do you think?

I think that this bug is indeed  a good reason to use `super(...arguments)` instead of `return super(...arguments)`.

However, I am slightly worried that, with the ES6 class syntax, the `constructor` method looks like a regular method, but it behaves differently w.r.t. inheritance. So, nonstandard uses of this method (wmay mysteriously fail when used on a super-class.

Therefore, it would be nice if `return expression` would be statically forbidden in the `constructor` method when defined using the `class` syntax (but a bare `return` is fine, which slightly complicates the grammar).