> 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