Object copy

# Maxime Warnier (11 years ago)

Do you know if it is planned or maybe in discussion for ES7 to have a simple clone system on objects ?

There are different notations, from :

  • jquery Object.clone( [withDataAndEvents ] [, deepWithDataAndEvents ] ) ( but only for DOM element )
  • underscore _.clone(object) ( return the cloned object )
  • angular angular.copy(source, [destination]); (return the object, same as underscore, or copy into an optional destination )

Maybe an Object.copy([options?]) would be interesting ?

# Alex Kocharin (11 years ago)

An HTML attachment was scrubbed... URL: esdiscuss/attachments/20140610/15fce0b5/attachment

# Frankie Bagnardi (11 years ago)

I'd like Object.merge(source, dest), and Object.clone(source).

Object.clone would be best if it cloned almost any object, like more advanced clone functions. This includes plain objects, arrays, instances of classes (preserving base class, etc.), regExp, promise, and ideally DOM nodes in browsers (along with anything else that can be cloned). If something can't be cloned, including primitives and functions, it should throw an error.

Object.merge would be a much simpler "copy enumerable own properties" function.

Object.merge({a: 1}, {}); and Object.clone({a: 1}); would be equivalent, but they differ in most other cases.

# Mameri, Fred (HBO) (11 years ago)

And maybe there should be a Object.move for value types...

# C. Scott Ananian (11 years ago)

On Tue, Jun 10, 2014 at 2:47 PM, Frankie Bagnardi <f.bagnardi at gmail.com> wrote:

I'd like Object.merge(source, dest), and Object.clone(source).

Object.assign is already in the ES6 spec.

# Rick Waldron (11 years ago)

On Tue, Jun 10, 2014 at 12:32 PM, Maxime Warnier <marmax at gmail.com> wrote:

Hi All

Do you know if it is planned or maybe in discussion for ES7 to have a simple clone system on objects ?

There are different notations, from :

  • jquery

Object.clone( [withDataAndEvents ] [, deepWithDataAndEvents ] )

jQuery doesn't clone objects, it clones DOM elements.

# Maxime Warnier (11 years ago)

Thanks for your answers.

Object.assign seems good but provides only copy for enumerable properties, not a real deep clone.

I know for jquery, that's why i precised "only for DOM" but it was just to show the syntax :)

# David Bruant (11 years ago)

Good to see you here :-)

This topic has been discussed recently on Twitter. See twitter.com/jeremyckahn/status/474259042005553154

I'm like Rick's answer in particular twitter.com/rwaldron/status/475017360085364736 as I believe a large share of cloning is just about data

As discussed in this Twitter thread, immutable data structures would be an interesting idea too. If an object is guaranteed to be deeply immutable, then, it can be passed around without the need for cloning. Clones are only necessary because the initial object is mutable in the first place. Immutable data structures have been briefly discussed here recently: esdiscuss/2014-June/037429 (see replies too)

# Maxime Warnier (11 years ago)

:)

thanks for the links !

You are right, it's generally about data. Serialize an object to JSON prevent from sharing references. On the twitter feed Jeremy talks about optimizing the process . I'm agree with that, for performance and a nicer syntax.

By the way, the Object.deepFreeze is really interesting , especially for an API and when you want to set some "private" properties . But I think it is a workaround to the issue of cloning because you can't freeze all objects and maybe you want to have a mutable object but cloning it afterward.

# Rick Waldron (11 years ago)

On Wednesday, June 11, 2014, Maxime Warnier <marmax at gmail.com> wrote:

Thanks for your answers.

Object.assign seems good but provides only copy for enumerable properties, not a real deep clone.

I know for jquery, that's why i precised "only for DOM" but it was just to show the syntax :)

Oops, sorry, I overlooked that.