<div dir="ltr">Also, one reason I haven't used that, if you clone descriptors you do a shallow copy, not a deep one ;-)</div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Sep 25, 2015 at 2:31 AM, Andrea Giammarchi <span dir="ltr"><<a href="mailto:andrea.giammarchi@gmail.com" target="_blank">andrea.giammarchi@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Claude, you know that's actually *my* proposal, right? :P<div><a href="https://gist.github.com/WebReflection/9353781" target="_blank">https://gist.github.com/WebReflection/9353781</a><br></div><div><br></div><div>But yeah, that's the spirit!</div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Sep 24, 2015 at 8:21 PM, Claude Pache <span dir="ltr"><<a href="mailto:claude.pache@gmail.com" target="_blank">claude.pache@gmail.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"><br><div><span><blockquote type="cite"><div>Le 24 sept. 2015 à 19:58, Andrea Giammarchi <<a href="mailto:andrea.giammarchi@gmail.com" target="_blank">andrea.giammarchi@gmail.com</a>> a écrit :</div><div><div dir="ltr"><div><span style="font-size:12.8px"><br></span></div><div>Last, but not least, one does not simply assign properties in JavaScript. If you want to clone you don't want to miss possible get/set accessors in the process, you don't want to miss getOwnPropertyNames and getOwnpropertySymbols neither, so the last loop doesn't work as proposal.</div><div><br></div><div>```js</div><div>// simplified version for regular objects only</div><div>// basically just the correct substitute of your last temp logic</div><div><div>Object.clone = function (src) {</div><div>  return Object.setPrototypeOf(</div><div>    Reflect.ownKeys(src).reduce((o, k) => {</div><div>      var d = Object.getOwnPropertyDescriptor(src, k);</div><div>      if (</div><div>        o.hasOwnProperty.call(d, 'value') &&</div><div>        /function|object/.test(typeof d.value)</div><div>      ) d.value = Object.clone(d.value);</div><div>      return Object.defineProperty(o, k, d);</div><div>    }, {}),</div><div>    Object.getPrototypeOf(src)</div><div>  );</div><div>};</div></div><div>```</div></div></div></blockquote><div><br></div></span><div>```js</div><div>Object.clone = function (src) {</div><div>    return Object.create(Object.getPrototypeOf(src), Object.getOwnPropertyDescriptors(src))</div><div>}</div><div>```</div><div><br></div><div>where  the definition of `Object.getOwnPropertyDescriptors()` is left as an exercise to the reader.</div><span><font color="#888888"><div><br></div><div><br></div><div>—Claude</div><div><br></div></font></span></div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>