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

