Sorry I'm so excited about this that I just could not read it all before 
posting this, my apologies if it's already discussed: 



On Monday, 2011-11-14 at 17:04 , Allen Wirfs-Brock 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.

I think this concern could be easily fixed if `class prototype` was equivalent 
of `Class(prototype)` where implementation of Class is following (BTW I don't 
propose to use Class function just illustration of what class prototype could 
be) :

function Class(prototype) {
function constructor() {
Object.hasOwnProperty(prototype, 'constructor')
    let instance = Object.create(prototype);
    instance.constructor.apply(instance, arguments);
    return instance;
}
constructor.prototype = prototype;
return constructor;
}

As additional benefit this solves issue of shared / frozen constructor 
properties of the prototype.

P.S.: I just yesterday I started experimenting with `Class` function in 
combination with selfish. 
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to