1 define(['./hasOwn', '../lang/deepClone', '../lang/isObject'], function (hasOwn, deepClone, isObject) {
10 // make sure we don't modify source element and it's properties
11 // objects are passed by reference
12 target = deepClone( arguments[0] );
14 while (obj = arguments[i++]) {
16 if ( ! hasOwn(obj, key) ) {
22 if ( isObject(val) && isObject(target[key]) ){
23 // inception, deep merge objects
24 target[key] = merge(target[key], val);
26 // make sure arrays, regexp, date, objects are cloned
27 target[key] = deepClone(val);