| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 | 
							- 'use strict'
 
- const valuesMap = new Map()
 
- class LocalStorage {
 
-   getItem (key) {
 
-     const stringKey = String(key)
 
-     if (valuesMap.has(key)) {
 
-       return String(valuesMap.get(stringKey))
 
-     }
 
-     return null
 
-   }
 
-   setItem (key, val) {
 
-     valuesMap.set(String(key), String(val))
 
-   }
 
-   removeItem (key) {
 
-     valuesMap.delete(key)
 
-   }
 
-   clear () {
 
-     valuesMap.clear()
 
-   }
 
-   key (i) {
 
-     if (arguments.length === 0) {
 
-       throw new TypeError("Failed to execute 'key' on 'Storage': 1 argument required, but only 0 present.") // this is a TypeError implemented on Chrome, Firefox throws Not enough arguments to Storage.key.
 
-     }
 
-     var arr = Array.from(valuesMap.keys())
 
-     return arr[i]
 
-   }
 
-   get length () {
 
-     return valuesMap.size
 
-   }
 
- }
 
- const instance = new LocalStorage()
 
- global.localStorage = new Proxy(instance, {
 
-   set: function (obj, prop, value) {
 
-     if (LocalStorage.prototype.hasOwnProperty(prop)) {
 
-       instance[prop] = value
 
-     } else {
 
-       instance.setItem(prop, value)
 
-     }
 
-     return true
 
-   },
 
-   get: function (target, name) {
 
-     if (LocalStorage.prototype.hasOwnProperty(name)) {
 
-       return instance[name]
 
-     }
 
-     if (valuesMap.has(name)) {
 
-       return instance.getItem(name)
 
-     }
 
-   }
 
- })
 
 
  |