6961f608dc9c8c796c7cd55fc8bd0972d95277ec
[platform/framework/web/crosswalk-tizen.git] /
1 var hasOwn = require('./hasOwn');
2 var deepClone = require('../lang/deepClone');
3 var isObject = require('../lang/isObject');
4
5     /**
6      * Deep merge objects.
7      */
8     function merge() {
9         var i = 1,
10             key, val, obj, target;
11
12         // make sure we don't modify source element and it's properties
13         // objects are passed by reference
14         target = deepClone( arguments[0] );
15
16         while (obj = arguments[i++]) {
17             for (key in obj) {
18                 if ( ! hasOwn(obj, key) ) {
19                     continue;
20                 }
21
22                 val = obj[key];
23
24                 if ( isObject(val) && isObject(target[key]) ){
25                     // inception, deep merge objects
26                     target[key] = merge(target[key], val);
27                 } else {
28                     // make sure arrays, regexp, date, objects are cloned
29                     target[key] = deepClone(val);
30                 }
31
32             }
33         }
34
35         return target;
36     }
37
38     module.exports = merge;
39
40