On Tue, Nov 15, 2011 at 1:01 PM, Brendan Eich <bren...@mozilla.com> wrote:
> On Nov 15, 2011, at 9:56 AM, Brendan Eich wrote: > > > On Nov 15, 2011, at 8:16 AM, Russell Leggett wrote: > > > >> I think this example is contrived, but illustrates the point that > JavaScript is very dynamic, and sometimes in the building process an object > can be out of sync from its constructor. My expectations when I see this > would be that my results would be a constructor function that can be used > to produce a new version of the UnaryExpression, calling its constructor > code. The best way I can think of to do this would be: > >> > >> function classify(obj){ > >> let sub = obj <| { > >> constructor(...args){ > >> super.constructor(...args); > >> } > >> } > >> sub.constructor.prototype = sub; > >> return sub.constructor; > >> } > >> > >> The key is that the UnaryExpression is not modified, and it should > still work even if a constructor is missing. If the UnaryExpression is > unobservable and had an own constructor property I would expect that the <| > portion can be skipped, and the constructor would just be modified directly > to point back at the enclosing object literal. > > > > Optimizations must be unobservable except by benchmarking or other kinds > of profiling. But if I'm following you correctly, even if the > UnaryExpression operand is a fresh object literal with an own 'constructor' > property, the result of skipping <| differs observably from the case where > the operand is not fresh: > > > > class {p: "I'm own"} > > Oops, that should have been: > > class {p: "I'm own", constructor(){}} > > of course. > > /be > Yes, of course you're right about that. There was something in the back of my brain saying there might be a problem with that optimization, but I had hoped it could be done, because that is probably the most common case. I suppose you could say that it isn't an optimization, but simply part of the semantics. Not sure if that would be confusing or just seem like the right behavior. - Russ
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss