1 | import DataView from './_DataView';
|
2 | import Map from './_Map';
|
3 | import Promise from './_Promise';
|
4 | import Set from './_Set';
|
5 | import WeakMap from './_WeakMap';
|
6 | import toSource from './_toSource';
|
7 |
|
8 |
|
9 | var mapTag = '[object Map]',
|
10 | objectTag = '[object Object]',
|
11 | promiseTag = '[object Promise]',
|
12 | setTag = '[object Set]',
|
13 | weakMapTag = '[object WeakMap]';
|
14 |
|
15 | var dataViewTag = '[object DataView]';
|
16 |
|
17 |
|
18 | var objectProto = Object.prototype;
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 | var objectToString = objectProto.toString;
|
26 |
|
27 |
|
28 | var dataViewCtorString = toSource(DataView),
|
29 | mapCtorString = toSource(Map),
|
30 | promiseCtorString = toSource(Promise),
|
31 | setCtorString = toSource(Set),
|
32 | weakMapCtorString = toSource(WeakMap);
|
33 |
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 | function getTag(value) {
|
42 | return objectToString.call(value);
|
43 | }
|
44 |
|
45 |
|
46 |
|
47 | if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
|
48 | (Map && getTag(new Map) != mapTag) ||
|
49 | (Promise && getTag(Promise.resolve()) != promiseTag) ||
|
50 | (Set && getTag(new Set) != setTag) ||
|
51 | (WeakMap && getTag(new WeakMap) != weakMapTag)) {
|
52 | getTag = function(value) {
|
53 | var result = objectToString.call(value),
|
54 | Ctor = result == objectTag ? value.constructor : undefined,
|
55 | ctorString = Ctor ? toSource(Ctor) : undefined;
|
56 |
|
57 | if (ctorString) {
|
58 | switch (ctorString) {
|
59 | case dataViewCtorString: return dataViewTag;
|
60 | case mapCtorString: return mapTag;
|
61 | case promiseCtorString: return promiseTag;
|
62 | case setCtorString: return setTag;
|
63 | case weakMapCtorString: return weakMapTag;
|
64 | }
|
65 | }
|
66 | return result;
|
67 | };
|
68 | }
|
69 |
|
70 | export default getTag;
|