define(['../object/forOwn', './kindOf'], function (forOwn, kindOf) {
/**
* Clone native types.
* @version 0.1.0 (2012/07/13)
*/
function clone(val){
var result;
switch ( kindOf(val) ) {
case 'Object':
result = cloneObject(val);
break;
case 'Array':
result = deepCloneArray(val);
break;
case 'RegExp':
result = cloneRegExp(val);
break;
case 'Date':
result = cloneDate(val);
break;
default:
result = val;
}
return result;
}
function cloneObject(source) {
var out = {};
forOwn(source, copyProperty, out);
return out;
}
function copyProperty(val, key){
this[key] = clone(val);
}
function cloneRegExp(r){
var flags = '';
flags += r.multiline? 'm' : '';
flags += r.global? 'g' : '';
flags += r.ignoreCase? 'i' : '';
return new RegExp(r.source, flags);
}
function cloneDate(date){
return new Date( date.getTime() );
}
function deepCloneArray(arr){
var out = [],
i = -1,
n = arr.length,
val;
while (++i < n) {
out[i] = clone(arr[i]);
}
return out;
}
return clone;
});
|