On Nov 15, 2011, at 4:08 PM, Russell Leggett wrote:

> At this point, since it seems to me easy enough to implement as a function, 
> is there a reason to go all the way to an operator. I think if you include 
> the ability to have a declarative style with a name, then it pushes it over 
> the top from a little sugar, to a comfortable familiar syntax.
> 
>   class Point {...} //constructor has the correct name, Point is a declared 
> variable
>   //vs
>   let Point = class {...}

That's where I am if we are going to add class, and dherman's proposal looks 
pretty good to me:

http://wiki.ecmascript.org/doku.php?id=strawman:minimal_classes

Class body is custom, uses best-of special forms (method definitions without 
comma separators, no data property on the prototype declarative form, other 
declarative forms look like declarations).

If we could have radical class-as-operator that composes without mutation, I 
would be overjoyed. We should keep working on it, I agree with MarkM.

The other way to go is to make

  class E

(for any expression E) always desugar to a new object with a new constructor 
that calls E.constructor if present:

  do {
    let %e = E;
    let %f = function /* NAME */ (...args) {
      return ('constructor' in %e) ? %e.constructor.apply(this, args) : void 0;
    };
    let %o = %e <| { constructor: %f };
    %f.prototype = %o;
    %f;
  }

The /* NAME */ bit could be imputed from new syntax if we want to support

  class N E

or (in this case a special form that restricts E to be an object literal):

  class N {...}

There would be no comma abatement, no static or private declarations, and data 
property initialisers might be in ... and problematic on the prototype if they 
have mutable values.

I'm not selling this yet, just exploring the class-as-unary-operator idea and 
avoiding the "maybe it's a new object, maybe's the operand" problem by always 
making a new object.

/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to