SOURCE

// 4)有这样一种场景,
// 需要将LocalStorage做业务上的分层Level1、
// Level2,当LocalStorage满的时候,
// 优先清理Level低的数据。
// 包装浏览器提供LocalStorage API,
// 实现对象storage,
// 包含API:storage.getLevel1(‘key’),
// storage.getLevel2(‘key’),
// storage.setLevel1(‘key’,‘value’),
// storage.setLevel2(‘key’,‘value’)。

class Stroage{
    static minIndex = 1
    constructor(level = 2) {
        for(let i = 1; i <= level; i++) {
            this[`getLevel${i}`] = this.getLeval.bind(this, i, ...arguments)
            this[`setLevel${i}`] = this.setLeval.bind(this, i, ...arguments)
        }
    }
    
    getLeval(level, key) {
        return localStorage.getItem(key)
    }
    setLeval(level ,key, value) {
        let arr = []
        if(localStorage.getItem(level)) {
            arr = JSON.parse(localStorage.getItem(level) || '[]')
            arr.push(key)
        } else {
            arr.push(key)
        }
        this.deleteStorage(level, () => {
            try {
                localStorage.setItem(key, value)
                localStorage.setItem(level, JSON.stringify(arr))
            } catch (err) {
                throw Error 
            }
            
        })
        
    }
    deleteStorage(level, func) {
        let bol = true, arr = []
        while(bol) {
            try {
                func()
                bol = false
                if(arr != '') {
                    localStorage.setItem(Storage.minIndex, JSON.stringify(arr))
                }
            } catch {
                if(!localStorage.getItem(Storage.minIndex)) {
                    return '数据量过大'
                    bol = true
                }
                arr = JSON.parse(localStorage.getItem(Storage.minIndex) || '[]')
                localStorage.removeItem(arr[0])
                arr.splice(0, 1)
                if(arr.length < 1) {
                    localStorage.removeItem(Storage.minIndex)
                    Storage.minIndex++
                }
                if(Storage.minIndex == level && arr.length < 1) {
                    return '数据量过大'
                    bol = false
                }
            }
        }
    }
}

const storage = new Stroage()
console.log(storage)
const data = storage.setLevel1('测试', '数据')
console.log(data)
console 命令行工具 X clear

                    
>
console