Brendan Eich wrote:
That is coherent with "new Foo" - 'Foo is the class' means 'new Foo
returns new instance'.

Yes, but your first example, class List(n) {...} cited above at the very
top, uses .{ to add what looks like prototype methods at and size. If
class List(n){...} evaluates to the constructor then you're adding these
to the constructor function, not to its prototype. You'd need

class List (n) {
this.@arr = n === +n ? new Array(n) : [];
}.prototype.{
at (i) {
i = +i;
if (i>=0 && i<this.@arr.length) { return this.@arr[i]; }
else throw "Out of bounds: "+i;
}
size () { return this.@arr.length; }
}

And of course to make this work when used as an expression that should
evaluate to the constructor function, tack on a .constructor at the end.

Was this just a mistake or are you trying to have class List(n){...}
evaluate to the prototype while List later evaluates to the constructor?
I am still confused by what you wrote and believe it does not hang
together.

I am probably writing densely and you had little time. I have written at the beginning of 1.:
'class ...}' as a sugar for 'function ...}.prototype'
(I put similar texts describing the idea to the header of 2. and 3. as well)

So, exactly, I wanted class List () { ... } work exactly the same as function List () { ... }.prototype - so List is the function but completion value is its prototype.

Which lets do the

class List (..) {
  ...
}.{
  // instance methods here
}

which is the most used case, but needs

List.{
  // static ones here
}

and is not exactly fine for class-expressions. But 1. is very minimal, leaving hard cases to be harder, but since it is only slightly-modified function (and user can by the time already learned enough to understand that 'class' is just a sugar), user can very easily switch class keyword to function keyword when it fits better for the situation. This 'class as function except returning prototype' is really useful primarily for declaring classes (and as a black magic for learners until they are later told class is nothing special). Just hinting it as one alternative of minimal 'class' use. Maybe it inspires something.

The other ones use 'class' differently.

And that takes us around the hermeneutic cycle again, which was my point
about classes not reaching consensus easily or by shotgunning the design
space. You may hit something but not bring down the prize bird: the
right not-too-minimal and not-too-maximal classes.

Maybe one of the alternatives (I like the 2. even when it needs do expressions when you want full-fledged class expression) can strike a chord with some of the readers.
1. is super-minimal (even when it returns the prototype) as its plus.

/be
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to