On Oct 19, 2013, at 7:55 AM, Rick Waldron wrote: > > > On Sat, Oct 19, 2013 at 10:25 AM, teramako <teram...@gmail.com> wrote: > Hi > > I believe Object.assign never update the target's [[prototype]]. But current > rev19 spec is using Put. So I'm afraid of following case will update the > [[prototype]]. > > var soruce = {}; > Object.defineProperty(source, "__proto__", { > value: { a: "A", b: "B" }, > enumerable: true > }); > var target = {}; > Object.assign(target, source); > Is this expected result ? and is there a plan to change to > DefinePropertyOrThrow from Put ? > > > Object.assign is essentially a "batch property assignment with Put"; I > believe what you're describing above is Object.mixin, which is "batch > property definition with DefinePropertyOrThrow". >
Actually, this is a good point. As currently specified Object.assign of with an own __proto__ property on the RHS object will trigger a [[SetPrototypeOf]] on the LHS object. Is that what we want. It is a direct fallout of specifying Object.assign as the equivalent of a sequence of property assignments from the RHS to the LHS. "__proto__" could be special cased. But should it? Object.mixin doesn't have this issue because, as Rick points out, it uses GetOwnProperty/DefineProperty instead of Get/Set. Anybody want to argue that Object.assign shouldn't trigger [[SetPrototypeOf]]? Allen
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss