storage
class Storage {
constructor(options = {}) {
if (Object.prototype.toString.call(options) !== '[object Object]') {
throw new Error('options is not an object');
}
this.options = options
}
set(key, value, expires) {
const createTime = Date.now()
const keyLabel = this.options.key
let data = window.localStorage.getItem(keyLabel)
data = JSON.parse(data) || {}
data[key] = { createTime, expires, data: value }
window.localStorage.setItem(keyLabel, JSON.stringify(data))
}
get(key, createTime) {
createTime = createTime || Date.now()
const keyLabel = this.options.key
let data = window.localStorage.getItem(keyLabel)
data = JSON.parse(data) || {}
const value = data[key] || {}
if (value.expires && createTime - value.createTime > value.expires) {
return null
}
return value.data
}
remove(keyList = []) {
if (!Array.isArray(keyList)) {
throw new Error('keyList must be an array')
}
const len = keyList.length
const keyLabel = this.options.key
if (len === 0) {
window.localStorage.removeItem(keyLabel)
} else {
let data = window.localStorage.getItem(keyLabel)
data = JSON.parse(data) || {}
keyList.forEach(item => {
delete data[item]
})
window.localStorage.setItem(keyLabel, JSON.stringify(data))
}
}
clear() {
this.remove()
}
}
const storage = (options = {}) => {
const storage = new Storage(options)
return storage
}
const storage3PL = storage({
key: '3pl'
})
export {
storage,
storage3PL
}
use
storage3PL.set('name', '李四')
storage3PL.set('name', '李四', 2 * 60 * 60 * 1000)
storage3PL.get('name')
storage3PL.get('name', new Date())
storage3PL.reomve('name')
storage3PL.clear()