I noted some open issues on "Classes with Trait Composition"

Brendan Eich brendan at mozilla.com
Wed May 18 11:48:52 PDT 2011

On May 18, 2011, at 10:58 AM, Bob Nystrom wrote:

> On Mon, May 16, 2011 at 8:02 AM, Brendan Eich <brendan at mozilla.com> wrote:
> On May 16, 2011, at 4:54 AM, Dmitry A. Soshnikov wrote:
>> Regarding `new` keyword for the constructor (aka initializer), after all, it als may be OK. E.g. Ruby uses `new` as exactly the method of a class -- Array.new, Object.new, etc. Though,  `constructor` is also good yeah.
> My point is not to bikeshed, rather (a) to name existing prototype properties minimally, (b) to avoid preempting other names.
> Using "new" for the constructor is one of my favorite feature's of Allen's proposal. Things I like about it:
> 1. It's terse. Since almost every class defines a ctor, this is helpful. "constructor" is a mouthful and repeating the full class name (like in Java, C++, etc.) is redundant.

The whole of class declaration is a mouthful. 'function' and 'prototype' are overlong too. We can try for conciseness in this one corner but it doesn't help in general. I think we need to weight the whole syntax and see where the verbosity *and other* pain points are in practice.

> 2. I think it's pretty clear to a user what's going on.

Same with 'constructor', and that property must exist somehow. Why not be explicit and avoid having two names for one prototype property?

> 3. It avoids stealing a valid identifier. You can't define a method named "new" but "constructor" is a valid property name.

3 is false in ES5. Reserved identifiers are valid property names. This is implemented in all the ES5-supporting browsers.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20110518/12df0fd1/attachment.html>

More information about the es-discuss mailing list