Projekt

Obecné

Profil

Stáhnout (2.21 KB) Statistiky
| Větev: | Revize:
1
var cloneArrayBuffer = require('./_cloneArrayBuffer'),
2
    cloneDataView = require('./_cloneDataView'),
3
    cloneRegExp = require('./_cloneRegExp'),
4
    cloneSymbol = require('./_cloneSymbol'),
5
    cloneTypedArray = require('./_cloneTypedArray');
6

    
7
/** `Object#toString` result references. */
8
var boolTag = '[object Boolean]',
9
    dateTag = '[object Date]',
10
    mapTag = '[object Map]',
11
    numberTag = '[object Number]',
12
    regexpTag = '[object RegExp]',
13
    setTag = '[object Set]',
14
    stringTag = '[object String]',
15
    symbolTag = '[object Symbol]';
16

    
17
var arrayBufferTag = '[object ArrayBuffer]',
18
    dataViewTag = '[object DataView]',
19
    float32Tag = '[object Float32Array]',
20
    float64Tag = '[object Float64Array]',
21
    int8Tag = '[object Int8Array]',
22
    int16Tag = '[object Int16Array]',
23
    int32Tag = '[object Int32Array]',
24
    uint8Tag = '[object Uint8Array]',
25
    uint8ClampedTag = '[object Uint8ClampedArray]',
26
    uint16Tag = '[object Uint16Array]',
27
    uint32Tag = '[object Uint32Array]';
28

    
29
/**
30
 * Initializes an object clone based on its `toStringTag`.
31
 *
32
 * **Note:** This function only supports cloning values with tags of
33
 * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
34
 *
35
 * @private
36
 * @param {Object} object The object to clone.
37
 * @param {string} tag The `toStringTag` of the object to clone.
38
 * @param {boolean} [isDeep] Specify a deep clone.
39
 * @returns {Object} Returns the initialized clone.
40
 */
41
function initCloneByTag(object, tag, isDeep) {
42
  var Ctor = object.constructor;
43
  switch (tag) {
44
    case arrayBufferTag:
45
      return cloneArrayBuffer(object);
46

    
47
    case boolTag:
48
    case dateTag:
49
      return new Ctor(+object);
50

    
51
    case dataViewTag:
52
      return cloneDataView(object, isDeep);
53

    
54
    case float32Tag: case float64Tag:
55
    case int8Tag: case int16Tag: case int32Tag:
56
    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
57
      return cloneTypedArray(object, isDeep);
58

    
59
    case mapTag:
60
      return new Ctor;
61

    
62
    case numberTag:
63
    case stringTag:
64
      return new Ctor(object);
65

    
66
    case regexpTag:
67
      return cloneRegExp(object);
68

    
69
    case setTag:
70
      return new Ctor;
71

    
72
    case symbolTag:
73
      return cloneSymbol(object);
74
  }
75
}
76

    
77
module.exports = initCloneByTag;
(219-219/590)