I'll also point out that cloning DOM elements generally won't work as intended because DOM implementations sometimes tack on hidden properties that aren't even seen by the engine. Also, I know that V8 adds hidden properties to objects, which would have to be transferred as well.
And this is where persistent data structures become useful... (I recently dropped Mori into a project because I was dealing with a ton of immutable data, but I still wanted it to be lightweight, and I didn't need all the bells and whistles of Immutable.js.) On Thu, Sep 24, 2015, 20:32 Andrea Giammarchi <[email protected]> wrote: > 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 < > [email protected]> 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 <[email protected]> >> wrote: >> >>> >>> Le 24 sept. 2015 à 19:58, Andrea Giammarchi <[email protected]> >>> 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 > [email protected] > https://mail.mozilla.org/listinfo/es-discuss >
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

