文章 评论 浏览 30
'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) } } })代理中这个判断又什么作用呀
'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) } } })
代理中这个判断又什么作用呀
localStorage 可以通过 localStorage.xxx 方式取值。
'Symbol' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later 报这个错怎么解决? 修改了target和lib也不行
文章 0 评论 0
接受
localStorage 可以通过 localStorage.xxx 方式取值。
第 103 题:模拟实现一个 localStorage