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)
- }
- }
- })
|