On Thu, Oct 13, 2011 at 12:59 PM, Dean Landolt <[email protected]> wrote:

>
>
> On Thu, Oct 13, 2011 at 3:13 PM, John J Barton <
> [email protected]> wrote:
>
>>
>>
>> On Thu, Oct 13, 2011 at 11:51 AM, Brendan Eich <[email protected]>wrote:
>>
>>> On Oct 13, 2011, at 2:19 PM, John J Barton wrote:
>>>
>>> On Thu, Oct 13, 2011 at 10:29 AM, Brendan Eich <[email protected]>wrote:
>>>
>>>> On Oct 13, 2011, at 1:17 PM, Brendan Eich wrote:
>>>>
>>>> ...
>>>
>>>> Object.getPrototypeOf is the "get" API in ES5. For the "preset" API we
>>>> want syntax at least, to avoid copying literals passed to a functional API.
>>>> We could have the functional API too but it differs in making a copy of
>>>> whatever object is passed in as the "RHS", as Jake just wrote. It would not
>>>> be Object.setPrototypeOf.
>>>>
>>>> I guess this is a performance argument? (I don't buy then)
>>>
>>>
>>> No, the semantics observably differ. Object.setPrototypeOf follows the
>>> "set" convention that suggests it mutates the [[Prototype]] of its first
>>> parameter, but TC39 won't agree to mutate existing objects' [[Prototype]]
>>> internal property values, even though many engines support that via writable
>>> __proto__.
>>>
>>
>> (Sorry, I misplaced my comment, I have none about setPrototypeOf)
>>
>>>
>>> So let's say we call the function Object.make. Then consider:
>>>
>>>   let o1 = {q: 99};
>>>   let o2 = Object.make({p: 27}, o1);
>>>   assert(o2 !== o1);
>>>   o2.q = 100;
>>>   assert(o1.q === 99);
>>>
>>> That's not how <| works.
>>>
>>
>> Darn, now I'm lost again. I would have said "That's how <| works" :-(
>> I would have said
>>   o2 = {p:27} <| o1;  // aka Object.make()
>>   o2  is {q:99, [[ProtoLink]]: {p:27}}  so
>>   o2 !== o1 true
>>   o2.q = 100;
>>   o2 is now {q:100, [[ProtoLink]]:{p:27}}
>>   o1.q === 99 true, but irrelevant
>> Obviously I've misunderstood something.
>>
>
Sorry I misunderstood was Brendan's comment "That's not how <| works". He
meant "Such an Object.make() would be similar to <| but <| intentionally
requires literal RHS." I thought me meant "even if <| allowed object on the
RHS it still would not work this way".

>
>
> Simply stated, the triangle operator lets you set the prototype of an
> object if and only if that object has not yet been observably instantiated.
> It's a small tradeoff, but it gives us many of the benefits of mutable
> protos without the known hazards.
>

Of course I disagree, but at least I understand thanks,
jjb
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to