Also, one reason I haven't used that, if you clone descriptors you do a shallow copy, not a deep one ;-)
On Fri, Sep 25, 2015 at 2:31 AM, Andrea Giammarchi < andrea.giammar...@gmail.com> wrote: > Claude, you know that's actually *my* proposal, right? :P > https://gist.github.com/WebReflection/9353781 > > But yeah, that's the spirit! > > On Thu, Sep 24, 2015 at 8:21 PM, Claude Pache <claude.pa...@gmail.com> > wrote: > >> >> Le 24 sept. 2015 à 19:58, Andrea Giammarchi <andrea.giammar...@gmail.com> >> a écrit : >> >> 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. >> >> ```js >> // simplified version for regular objects only >> // basically just the correct substitute of your last temp logic >> Object.clone = function (src) { >> return Object.setPrototypeOf( >> Reflect.ownKeys(src).reduce((o, k) => { >> var d = Object.getOwnPropertyDescriptor(src, k); >> if ( >> o.hasOwnProperty.call(d, 'value') && >> /function|object/.test(typeof d.value) >> ) d.value = Object.clone(d.value); >> return Object.defineProperty(o, k, d); >> }, {}), >> Object.getPrototypeOf(src) >> ); >> }; >> ``` >> >> >> ```js >> Object.clone = function (src) { >> return Object.create(Object.getPrototypeOf(src), >> Object.getOwnPropertyDescriptors(src)) >> } >> ``` >> >> where the definition of `Object.getOwnPropertyDescriptors()` is left as >> an exercise to the reader. >> >> >> —Claude >> >> >
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss