00001 var cloneArrayBuffer = require('./_cloneArrayBuffer'), 00002 cloneDataView = require('./_cloneDataView'), 00003 cloneMap = require('./_cloneMap'), 00004 cloneRegExp = require('./_cloneRegExp'), 00005 cloneSet = require('./_cloneSet'), 00006 cloneSymbol = require('./_cloneSymbol'), 00007 cloneTypedArray = require('./_cloneTypedArray'); 00008 00010 var boolTag = '[object Boolean]', 00011 dateTag = '[object Date]', 00012 mapTag = '[object Map]', 00013 numberTag = '[object Number]', 00014 regexpTag = '[object RegExp]', 00015 setTag = '[object Set]', 00016 stringTag = '[object String]', 00017 symbolTag = '[object Symbol]'; 00018 00019 var arrayBufferTag = '[object ArrayBuffer]', 00020 dataViewTag = '[object DataView]', 00021 float32Tag = '[object Float32Array]', 00022 float64Tag = '[object Float64Array]', 00023 int8Tag = '[object Int8Array]', 00024 int16Tag = '[object Int16Array]', 00025 int32Tag = '[object Int32Array]', 00026 uint8Tag = '[object Uint8Array]', 00027 uint8ClampedTag = '[object Uint8ClampedArray]', 00028 uint16Tag = '[object Uint16Array]', 00029 uint32Tag = '[object Uint32Array]'; 00030 00044 function initCloneByTag(object, tag, cloneFunc, isDeep) { 00045 var Ctor = object.constructor; 00046 switch (tag) { 00047 case arrayBufferTag: 00048 return cloneArrayBuffer(object); 00049 00050 case boolTag: 00051 case dateTag: 00052 return new Ctor(+object); 00053 00054 case dataViewTag: 00055 return cloneDataView(object, isDeep); 00056 00057 case float32Tag: case float64Tag: 00058 case int8Tag: case int16Tag: case int32Tag: 00059 case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: 00060 return cloneTypedArray(object, isDeep); 00061 00062 case mapTag: 00063 return cloneMap(object, isDeep, cloneFunc); 00064 00065 case numberTag: 00066 case stringTag: 00067 return new Ctor(object); 00068 00069 case regexpTag: 00070 return cloneRegExp(object); 00071 00072 case setTag: 00073 return cloneSet(object, isDeep, cloneFunc); 00074 00075 case symbolTag: 00076 return cloneSymbol(object); 00077 } 00078 } 00079 00080 module.exports = initCloneByTag;