<div dir="ltr">here again dunder keyword ^_^<div><br></div><div>As it is Object.assign does not bring any benefit over </div><div><br></div><div>```javascript</div><div><br></div><div>for(var key in source) {</div><div>  target[key] = source[key];</div>
<div>}</div><div><br></div><div>```</div><div><br></div><div>except former pattern can easily filter undesired properties such</div><div><br></div><div><div>```javascript</div><div><br></div><div>for(var key in source) {</div>
<div>  if (key != '__proto__') {</div><div>    target[key] = source[key];</div><div>  }</div><div>}</div><div><br></div><div>```</div></div><div><br></div><div>which is the new `hasOwnProperty` for ES5 era ...</div>
<div><br></div><div><br></div><div>I am not saying `Object.assign` should skip such property, 'cause when we deal with dictionaries everything should be considered valid, but I miss any advantage on using such method if not a false feeling that's gonna be safer 'cause implemented in core.<br>
</div><div><br></div><div>My 2 cents</div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sat, Oct 19, 2013 at 9:57 AM, Allen Wirfs-Brock <span dir="ltr"><<a href="mailto:allen@wirfs-brock.com" target="_blank">allen@wirfs-brock.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><div class="h5"><br><div><div>On Oct 19, 2013, at 7:55 AM, Rick Waldron wrote:</div>
<br><blockquote type="cite"><div dir="ltr"><div class="gmail_extra"><br><br><div class="gmail_quote">On Sat, Oct 19, 2013 at 10:25 AM, teramako <span dir="ltr"><<a href="mailto:teramako@gmail.com" target="_blank">teramako@gmail.com</a>></span> wrote:<br>



<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div style="word-wrap:break-word"><p>Hi</p><p>I believe Object.assign never update the target's <code>[[prototype]]</code>. But current rev19 spec is using <code>Put</code>. So I'm afraid of following case will update the <code>[[prototype]]</code>.</p>


<pre><code>var soruce = {};
Object.defineProperty(source, "__proto__", {
    value: { a: "A", b: "B" },
    enumerable: true
});
var target = {};
Object.assign(target, source);
</code></pre><p>Is this expected result ? and is there a plan to change to <code>DefinePropertyOrThrow</code> from <code>Put</code> ?</p></div></blockquote><div><br></div><div>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".</div>


<div><br></div></div></div></div></blockquote><br></div></div></div><div>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?</div>
<div><br></div><div>Object.mixin doesn't have this issue because, as Rick points out, it uses GetOwnProperty/DefineProperty instead of Get/Set.</div><div><br></div><div>Anybody want to argue that Object.assign shouldn't trigger [[SetPrototypeOf]]?</div>
<span class="HOEnZb"><font color="#888888"><div><br></div><div>Allen</div><br></font></span></div><br>_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div><br></div>