Preparation Code Preparation HTML (this will be inserted in the <body>
of a valid HTML5 document in standards mode) (useful when testing DOM operations or including libraries) <script src ="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js" > </script >
Setup JS var oldObject = {
a : 1 ,
b : 2 ,
c : 3 ,
d : 4 ,
e : 5 ,
f : function ( ) {
return 6 ;
},
g : [7 , 8 , 9 ]
};
var oldArray = [1 , 2 , 3 , 4 , 5 ,
function ( ) {
return 6 ;
},
[7 , 8 , 9 ]
];
function clone (obj ) {
var target = {};
for (var i in obj) {
if (obj.hasOwnProperty (i)) {
target[i] = obj[i];
}
}
return target;
}
Object .defineProperties (Object , {
'extend' : {
'configurable' : true ,
'enumerable' : false ,
'value' : function extend (what, wit ) {
var extObj, witKeys = Object .keys (wit);
extObj = Object .keys (what).length ? Object .clone (what) : {};
witKeys.forEach (function (key ) {
Object .defineProperty (extObj, key, Object .getOwnPropertyDescriptor (wit, key));
});
return extObj;
},
'writable' : true
},
'clone' : {
'configurable' : true ,
'enumerable' : false ,
'value' : function clone (obj ) {
return Object .extend ({}, obj);
},
'writable' : true
}
});
function deepClone (object ) {
if (object === null || !(object instanceof Object )) {
return object;
}
var clone, ctor = object.constructor ;
switch (ctor) {
case RegExp :
clone = new ctor (object);
break ;
case Date :
clone = new ctor (object.getTime ());
break ;
default :
clone = new ctor ();
}
var prop;
for (prop in object) {
clone[prop] = deepClone (object[prop]);
}
return clone;
};
Teardown JS
Test cases
Test #1 Title *
Async
Code * var newObject = jQuery.extend (true , {}, oldObject);
Test #2 Title *
Async
Code * var newObject = JSON .parse (JSON .stringify (oldObject));
Title *
Async
Code * var newObject = jQuery.extend ({}, oldObject);
Title *
Async
Code * var newObject = clone (oldObject);
Title *
Async
Code * var newObject = Object .clone (oldObject);
Title *
Async
Code * var newObject = eval ("(" + JSON .stringify (oldObject) + ")" );
Title *
Async
Code * var newArray = jQuery.extend ([], oldArray);
Title *
Async
Code * var newObject = deepClone (oldObject);