localstorage可通过前缀约定和封装namespacedstorage类实现命名空间隔离:为各模块定义唯一前缀(如"user:"),类自动拼接前缀并处理序列化,支持set/get/remove/clear操作,且clear仅影响本命名空间键值。

localStorage 本身不支持命名空间,但可以通过统一的前缀约定 + 封装工具函数来实现逻辑上的命名空间隔离,避免不同模块或库之间的键名冲突。
用前缀模拟命名空间
最简单有效的方式是为每个业务模块或功能域定义唯一前缀,所有 key 都拼接该前缀。例如:
- 用户模块用 "user:" →
localStorage.setItem("user:token", "abc123") - 配置模块用 "config:" →
localStorage.setItem("config:theme", "dark") - 购物车用 "cart:" →
localStorage.setItem("cart:items", JSON.stringify([...]))
这样即使多个模块都用 "token" 或 "items" 作键名,实际存储的 key 也互不干扰。
封装带命名空间的 Storage 类
写一个轻量类,自动注入前缀,让调用更安全、更一致:
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
class NamespacedStorage {
constructor(namespace) {
this.namespace = namespace + ':';
}
set(key, value) {
const fullKey = this.namespace + key;
localStorage.setItem(fullKey, typeof value === 'object' ? JSON.stringify(value) : String(value));
}
get(key) {
const fullKey = this.namespace + key;
const raw = localStorage.getItem(fullKey);
try {
return JSON.parse(raw);
} catch {
return raw;
}
}
remove(key) {
localStorage.removeItem(this.namespace + key);
}
clear() {
Object.keys(localStorage)
.filter(k => k.startsWith(this.namespace))
.forEach(k => localStorage.removeItem(k));
}
}
使用示例:
const userStore = new NamespacedStorage('user');-
userStore.set('token', 'xyz');→ 实际存为"user:token" -
userStore.clear()→ 只清空以"user:"开头的所有项
避免全局污染:模块级实例 + 按需导入
不要在全局创建多个 NamespacedStorage 实例,而是按模块封装并导出专用实例:
- 在
user/storage.js中:export const userStorage = new NamespacedStorage('user'); - 在
cart/storage.js中:export const cartStorage = new NamespacedStorage('cart'); - 各模块只导入自己对应的实例,天然隔离,也不会误操作他人数据
额外建议:开发期加校验和调试支持
可在调试环境启用 key 格式检查,比如禁止使用空格、特殊符号,或记录每次 set/get 的命名空间上下文;也可提供 listKeys(namespace) 方法辅助排查冲突。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










