diff --git a/source/Ox.js b/source/Ox.js index 242bb59c..a2ff9e37 100644 --- a/source/Ox.js +++ b/source/Ox.js @@ -289,15 +289,21 @@ Ox.avg = function(obj) { }; /*@ -Ox.clone Returns a (shallow) copy of an object or array +Ox.clone Returns a (deep) copy of an object or array > (function() { a = ['val']; b = Ox.clone(a); a[0] = null; return b[0]; }()) 'val' > (function() { a = {key: 'val'}; b = Ox.clone(a); a.key = null; return b.key; }()) 'val' @*/ -Ox.clone = function(obj) { - return Ox.isArray(obj) ? obj.slice() : Ox.extend({}, obj); +Ox.clone = function(col) { + // return Ox.isArray(col) ? col.slice() : Ox.extend({}, col); + var clone = Ox.isArray(col) ? [] : {}; + Ox.forEach(col, function(val, key) { + clone[key] = ['array', 'object'].indexOf(Ox.typeOf(val)) > -1 + ? Ox.clone(val) : val; + }); + return clone; }; /*@