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 On Dec 28, 2013, at 11:11 AM, Allen Wirfs-Brock wrote: > > On Dec 28, 2013, at 7:38 AM, John Barton wrote: > >> >> >> >> On Fri, Dec 27, 2013 at 10:22 AM, Allen Wirfs-Brock <[email protected]> >> wrote: >> >> On Dec 27, 2013, at 7:27 AM, Brendan Eich wrote: >> ... >>> I thought Allen designed things so >>> >>> class C {} >>> >>> differed from >>> >>> class C extends Object {} >>> >>> so as in the first case to avoid (a) super calling Object and making a >>> useless newborn; (b) C inheriting class-side properties from Object. >> >> Exactly, see step 7 of >> http://people.mozilla.org/~jorendorff/es6-draft.html#sec-runtime-semantics-classdefinitionevaluation >> >> >> Allen >> >> >> I think the differences should include to making calls to super() illegal >> when 'extends' is absent: >> class C { constructor(url) {super(url);}} // legal, I expected illegal. >> > > Plausible, but what about the possibility that a framework dynamically > patches the prototype chain of C.prototype before it is first instantiated or > if C uses its @@create method to return instances that have different or > extra objects (that have a 'constructor' property) patched into their > prototype chain. > > This, like the base question of this thread, seems like another example of a > tension between supporting the "normal" usage patterns for class declarations > and allowing enough flexibility to enable using class declarations as > building blocks for less normal abstractions. > > I could probably go either way. Pragmatically, from a spec. writing > perspective, the conditions for issuing this error are bit complicated to > define. Even without an extends clause the instances still inherit from > Object.prototype so super call still need to be allowed in non-constructor > instances methods and even in constructor methods things like > super.toString() need to be allowed. I generally try to avoid early errors > that have a lot of conditions associated with them. > > Allen > > > > _______________________________________________ > es-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

