Object.clone - not quite a proposal

Claude Pache claude.pache at gmail.com
Thu Sep 24 18:21:20 UTC 2015


> Le 24 sept. 2015 à 19:58, Andrea Giammarchi <andrea.giammarchi at 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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20150924/3c9c39ba/attachment.html>


More information about the es-discuss mailing list