1 var clone = require('./clone');
2 var forOwn = require('../object/forOwn');
3 var kindOf = require('./kindOf');
4 var isPlainObject = require('./isPlainObject');
7 * Recursively clone native types.
9 function deepClone(val, instanceClone) {
10 switch ( kindOf(val) ) {
12 return cloneObject(val, instanceClone);
14 return cloneArray(val, instanceClone);
20 function cloneObject(source, instanceClone) {
21 if (isPlainObject(source)) {
23 forOwn(source, function(val, key) {
24 this[key] = deepClone(val, instanceClone);
27 } else if (instanceClone) {
28 return instanceClone(source);
34 function cloneArray(arr, instanceClone) {
40 out[i] = deepClone(arr[i], instanceClone);
45 module.exports = deepClone;