| var cloneArrayBuffer = require('./_cloneArrayBuffer'), |
| cloneDataView = require('./_cloneDataView'), |
| cloneRegExp = require('./_cloneRegExp'), |
| cloneSymbol = require('./_cloneSymbol'), |
| cloneTypedArray = require('./_cloneTypedArray'); |
| |
| /** `Object#toString` result references. */ |
| var boolTag = '[object Boolean]', |
| dateTag = '[object Date]', |
| mapTag = '[object Map]', |
| numberTag = '[object Number]', |
| regexpTag = '[object RegExp]', |
| setTag = '[object Set]', |
| stringTag = '[object String]', |
| symbolTag = '[object Symbol]'; |
| |
| var arrayBufferTag = '[object ArrayBuffer]', |
| dataViewTag = '[object DataView]', |
| float32Tag = '[object Float32Array]', |
| float64Tag = '[object Float64Array]', |
| int8Tag = '[object Int8Array]', |
| int16Tag = '[object Int16Array]', |
| int32Tag = '[object Int32Array]', |
| uint8Tag = '[object Uint8Array]', |
| uint8ClampedTag = '[object Uint8ClampedArray]', |
| uint16Tag = '[object Uint16Array]', |
| uint32Tag = '[object Uint32Array]'; |
| |
| /** |
| * Initializes an object clone based on its `toStringTag`. |
| * |
| * **Note:** This function only supports cloning values with tags of |
| * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. |
| * |
| * @private |
| * @param {Object} object The object to clone. |
| * @param {string} tag The `toStringTag` of the object to clone. |
| * @param {boolean} [isDeep] Specify a deep clone. |
| * @returns {Object} Returns the initialized clone. |
| */ |
| function initCloneByTag(object, tag, isDeep) { |
| var Ctor = object.constructor; |
| switch (tag) { |
| case arrayBufferTag: |
| return cloneArrayBuffer(object); |
| |
| case boolTag: |
| case dateTag: |
| return new Ctor(+object); |
| |
| case dataViewTag: |
| return cloneDataView(object, isDeep); |
| |
| case float32Tag: case float64Tag: |
| case int8Tag: case int16Tag: case int32Tag: |
| case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: |
| return cloneTypedArray(object, isDeep); |
| |
| case mapTag: |
| return new Ctor; |
| |
| case numberTag: |
| case stringTag: |
| return new Ctor(object); |
| |
| case regexpTag: |
| return cloneRegExp(object); |
| |
| case setTag: |
| return new Ctor; |
| |
| case symbolTag: |
| return cloneSymbol(object); |
| } |
| } |
| |
| module.exports = initCloneByTag; |