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