Blame view

node_modules/zrender/src/core/WeakMap.ts 1.19 KB
bd028579   易尊强   2/28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
  let wmUniqueIndex = Math.round(Math.random() * 9);
  
  const supportDefineProperty = typeof Object.defineProperty === 'function';
  
  export default class WeakMap<K extends object, V> {
  
      protected _id: string;
  
      constructor() {
          this._id = '__ec_inner_' + wmUniqueIndex++;
      }
  
      get(key: K): V {
          return (this._guard(key) as any)[this._id];
      }
  
      set(key: K, value: V): WeakMap<K, V> {
          const target = this._guard(key) as any;
          if (supportDefineProperty) {
              Object.defineProperty(target, this._id, {
                  value: value,
                  enumerable: false,
                  configurable: true
              });
          }
          else {
              target[this._id] = value;
          }
          return this;
      }
  
      delete(key: K): boolean {
          if (this.has(key)) {
              delete (this._guard(key) as any)[this._id];
              return true;
          }
          return false;
      }
  
      has(key: K): boolean {
          return !!(this._guard(key) as any)[this._id];
      }
  
      protected _guard(key: K): K {
          if (key !== Object(key)) {
              throw TypeError('Value of WeakMap is not a non-null object.');
          }
          return key;
      }
  }