title: How to Deep clone in javascript
body: <p>How do you deep clone a JavaScript object?</p>
  <p>I know there are various functions based on frameworks like <code>JSON.parse(JSON.stringify(o))</code> and <code>$.extend(true, {}, o)</code> but I don't want to use a framework like that.</p>
  <p>What is the most elegant or efficient way to create a deep clone.</p>
  <p>We do care about edge cases like cloning array's. Not breaking prototype chains, dealing with self reference.</p>
  <p>We don't care about supporting copying of DOM objects and like because <code>.cloneNode</code> exists for that reason.</p>
  <p>As I mainly want to use deep clones in <code>node.js</code> using ES5 features of the V8 engine is acceptable.</p>
  <p>[Edit]</p>
  <p>Before anyone suggests let me mention there is a distinct difference between creating a copy by prototypically inheriting from the object and <em>cloning</em> it. The former makes a mess of the prototype chain.</p>
  <p>[Further Edit]</p>
  <p>After reading your answer I came to the annoying discovery that cloning entire objects is a very dangerous and difficult game. Take for example the following closure based object</p>
  <pre><code>var o = (function() {
       var magic = 42;
  
       var magicContainer = function() {
            this.get = function() { return magic; };
            this.set = function(i) { magic = i; };
       }
  
        return new magicContainer;
  }());
  
  var n = clone(o); // how to implement clone to support closures
  </code></pre>
  <p>Is there any way to write a clone function that clones the object, has the same state at time of cloning but cannot alter the state of <code>o</code> without writing a JS parser in JS.</p>
  <p>There should be no real world need for such a function anymore. This is mere academic interest.</p>