really deep clones
by rwaldron
HTML
<script src="https://raw.github.com/gist/1009387/clone.js"></script>
<script src="https://raw.github.com/gist/1115701/console.assert.js"></script>
<!--
Testing: https://gist.github.com/1009387
Resource: https://gist.github.com/1115701
-->
JavaScript
var orig = {
foo: "bar",
inner: {
prop: false,
array: [ 1, 2, 3, 4, 5 ]
}
},
cloned = clone( orig );
console.assert(
cloned.hasOwnProperty("foo"), "Cloned object has a property `foo`"
);
console.assert(
cloned.hasOwnProperty("inner"), "Cloned object has a property `inner`"
);
console.assert(
cloned.inner.hasOwnProperty("prop"), "`cloned.inner` object has a property `prop`"
);
console.assert(
cloned.inner.hasOwnProperty("array"), "`cloned.inner` object has a property `.array`"
);
console.assert(
Array.isArray(cloned.inner.array), "`cloned.inner.array` is an array"
);
// Change a value of the original `inner.array`
cloned.inner.array[0] = "a";
console.assert(
orig.inner.array[0] !== cloned.inner.array[0],
"Set cloned.inner.array[0] = 'a'; orig.inner.array[0] !== cloned.inner.array[0]"
);
cloned.foo = "qux";
console.assert(
orig.foo !== cloned.foo,
"Set cloned.foo = 'qux'; orig.foo !== cloned.foo"
);