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

Bob Nystrom rnystrom at google.com
Thu May 19 17:03:14 PDT 2011

On Thu, May 19, 2011 at 3:08 PM, Brendan Eich <brendan at mozilla.com> wrote:

> class Point {
>   x = 0;
>   ...
> }
> is a bit of a mystery.
> Is it an assignment expression-statement? No, no statements as *
> ClassElements*.
> Could it be creating a prototype property, as other unprefixed property
> initialisers such as get and set accessor declarations, and property
> initialiser extensions declaring prototype methods, do? Yes, that's the
> intent.
> But, I object (mildly), it does not *look* like a property initialiser. It
> looks like an assignment expression-statement.

Agreed, completely. My first stab at this used var for declaring fields:

class Point {
  var x = 0; // x field on prototype

I know Mark wishes var could be banished from the language completely. My
goal would be to have let become the thing you use for variables and
varthen becomes a "free" keyword we can then repurpose for something
like this.
I don't know if that would just sow confusion, but var seems like too nice
of a keyword to go to waste, and it would be unambiguous inside a class
since a class body doesn't allow arbitrary statements.

> But this is only for defining data properties on the class prototype. Is
> this case common?

Closure code uses data-on-the-prototype pervasively for default values,

class Thermostat {
  var temp = 70; // on proto
  setTemp(temp) {
    this.temp = temp; // once you touch it, it becomes specific to the

I count nine examples of this just in
for "prototype.content_"). It has the advantage of not wasting per-instance
memory for values that are still the default, which is a neat trick that
class-based languages can't do.

Or if you have a measured need based on some existing code, which I'd love
> to hear about: consider a prefixing keyword to make this look like an
> alternative to static x = 0.

That was part of my motivation for using var. It seemed weird to have an
adjective like static without a noun that it modifies. (I was also using
function for methods for the same reason, though we've moved away from

- bob
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20110519/80fd47aa/attachment.html>

More information about the es-discuss mailing list