An "extend" operator is a natural companion to <|

Brendan Eich brendan at mozilla.com
Tue Jul 19 13:27:56 PDT 2011


On Jul 19, 2011, at 12:17 PM, Allen Wirfs-Brock wrote:

> On Jul 19, 2011, at 11:56 AM, Luke Hoban wrote:
> 
>>>> Object.extend(src, dest)
>> 
>>> This is certainly closest to paving the cowpath. Either via a built-in module exporting 'extend', or as you suggest, directly on Object. The Object.extend route is a bit harder to analyze, but not fatally so for any capable static analysis framework.
>>> Either way (built-in module or Object.extend), old script (Hi Luke! ;-) could use it too.
>> 
>> Agreed - this was my initial reaction to <| as well, and I still see a number of reasons to prefer a library solution over a syntax solution for both 'Obect.extend' and 'Object.make'.
>> 
>> The arguments for <| as an operator seemed to boil down to:
>> 1) It's more 'declarative'
>> 2) It can be optimized by engines
> 
> One issue is that <| conceptually modifies the [[Prototype]] of its RHS.  As an operator (whether special character or keyword based) we can restrict the RHS to be a literal and define the behavior such that no actual mutation of [[Prototype]] is necessary.

Good point, and I should have noted that in my reply (which was supportive of Object.extend, where the problem does not arise).


> However, at the value level we have no way to distinguish an object that was created via a literal and which has no references other than the current argument value.  So, when we specify Object.make we have to accept an arbitrary object as the second argument  and specify either [[Prototype]] mutation or some sort of shallow copy, either of which can be problematic. 

We are *not* gonna standardize mutable [[Prototype]].

/be


More information about the es-discuss mailing list