这里有两个问题想要问一下
来源:4-9 Storage封装

慕莱坞0998854
2020-02-21
- 老师这里操作的是sessionStorage,我想请问一下平时实际工作中用这个用的多吗?我就见过用localStorage的。
- 老师这里的封装我觉得有点奇怪,因为这样的写相当于限定了对象的格式只有两层?所以我改写了一下,但是这样还是有个问题 ,就是在setStorage的时候,只能把原数据取出来修改后再完整的写入。
const STORAGE_KEY = "mall";
const find = function(obj, name) {
if (obj[name]) {
return obj;
}
let res;
for (let prop in obj) {
if (
obj.hasOwnProperty(prop) &&
Object.prototype.toString.call(obj[prop]) === "[object Object]"
) {
res = find(obj[prop], name);
}
if (res) {
return res;
}
}
return res;
};
export default {
getStorage() {
return JSON.parse(window.sessionStorage.getItem(STORAGE_KEY) || "{}");
},
setStorage(obj) {
window.sessionStorage.setItem(STORAGE_KEY, JSON.stringify(obj));
},
findItem(key) {
const data = this.getStorage();
const res = find(data, key);
return res;
},
getItem(key) {
const res = this.findItem(key);
return res ? res[key] : undefined;
}
}
写回答
1回答
-
河畔一角
2020-02-21
1. 实际工作当中用localStorage居多,这个案例用sessionStorage讲解实际上只是为了跟后台保持一致,因为后台也是会话级别的。原理是一样,改个名字即可。
2.这个封装确实只支持两层,结合工作情况,发现两层其实已经能够满足90%以上的需求,一般的关键字段放在第一层,模块级别的放在第二层。没必要一直递归下去。你的做法是全部取出来然后一层层获取对象,然后赋值,最后一次性插进去其实也可以,但是我自己感觉不是很实用,只是个人观点012020-02-21
相似问题