On Nov 14, 2011, at 4:05 PM, Jake Verbaten wrote:
>> UnaryExpression :
>> class UnaryExpression
>> ...
>>
>> The semantics are:
>> 1. if UnaryExpression is undefined or null, return the value of
>> UnaryExpression.
>> 2. Let obj be ToObject(UnaryExpression)
>> 3. Return the result of calling the [[Get]] internal method of obj with
>> argument 'constructor'
>
> Interesting, so 'constructor' will inherit from Object.prototype if missing
> from the exemplar. This means
>
> let Point = class {
> x:0,
> y,0
> };
>
> let p = new Point(1, 2);
>
> will result in p being constructed via the equivalent of new Number(1).
>
sh*t! I though I'd had a solution for this, but maybe I don't...
If you are really going to define either an object or class exemplar, you
really need to define a constructor. The object exemplar case actually works
out ok in this case because the inherited constructor is "called as a
function", not "as a constructor". So for
let Point = {
x: 0,
y: 0
};
let p = new Point(1,2);
Is pretty much equivalent to:
let p = Point <| {};
which may not be exactly what the programmer expected but it is a least in the
vicinity and yields an object with (inherited) x and y properties.
> When you create a function, it has an automatically created prototype object
> who has a constructor property defaulted to the original function.
>
> Why would it be bad to augment the UnaryExpression after the class keyword so
> that it has an empty constructor if it doesn't exist?
that would turn class from a simple property accessing operator to a mutating
operator that I'm sure would never be accepted.
A pattern like:
class { }
should always have a constructor specified in the object literal but saying the
class operator (as I'm trying to define it) adds a constructor seems very
unhygienic. Of course, it would be great if my IDE, or even my ES engine
warned me when I coded this. Maybe that's enough. But I suspect that it isn't.
I'm going to have to put some more thought into the own vs inherited
constructor part of the design.
Allen
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss