25fd95f14dfa0d29991ba2d8b1356fe27bdc00c3
[platform/framework/web/crosswalk-tizen.git] /
1 var clone = require('./clone');
2 var forOwn = require('../object/forOwn');
3 var kindOf = require('./kindOf');
4 var isPlainObject = require('./isPlainObject');
5
6     /**
7      * Recursively clone native types.
8      */
9     function deepClone(val, instanceClone) {
10         switch ( kindOf(val) ) {
11             case 'Object':
12                 return cloneObject(val, instanceClone);
13             case 'Array':
14                 return cloneArray(val, instanceClone);
15             default:
16                 return clone(val);
17         }
18     }
19
20     function cloneObject(source, instanceClone) {
21         if (isPlainObject(source)) {
22             var out = {};
23             forOwn(source, function(val, key) {
24                 this[key] = deepClone(val, instanceClone);
25             }, out);
26             return out;
27         } else if (instanceClone) {
28             return instanceClone(source);
29         } else {
30             return source;
31         }
32     }
33
34     function cloneArray(arr, instanceClone) {
35         var out = [],
36             i = -1,
37             n = arr.length,
38             val;
39         while (++i < n) {
40             out[i] = deepClone(arr[i], instanceClone);
41         }
42         return out;
43     }
44
45     module.exports = deepClone;
46
47
48