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


> 
> vs.
> 
> class compute_object_with_own_p();
> 
> where compute_object_with_own_p returns an object {p: "I'm own too"}.
> 
> In the latter case, returning a new object whose [[Prototype]] references the 
> non-fresh {p: "I'm own too"} object makes an observable difference in where 
> 'p' lives.
> 
> /be
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss

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

Reply via email to