⭐️ 更多前端技术和知识点,搜索订阅号JS 菌
订阅看到篇文章以为不错,原文:https://davidwalsh.name/javas...。讲的是使用 Proxy 来封装 Storage API,作一层提供存取数据的代理层。这里简单翻译一下这篇文章的主要内容。javascript
这篇文章提到 Proxy 这种语法能够用来封装 sessionStorage、 localStorage 甚至是 IndexedDB。能够使用 Proxy 代理来使 API 更容易使用。前端
首先介绍一下 Proxy 的基本用法:java
/* const proxy = new Proxy({}, { get: (obj, prop) => { ... }, set: (obj, prop, value) => { ... }, // more props here }); */ // This basic proxy returns null instead of undefined if the // property doesn't exist // 若是属性不存在那么返回的是 null 而不是 undefined const proxy = new Proxy({}, { get: (obj, prop) => { return prop in obj ? obj[prop] : null; } }); // proxy.whatever => null
而后编写一种存取 Storage 数据的代理:session
// storage 是 Storage API 的类型,能够是 localStorage 或是 sessionStorage // prefix 则属于 namespace function getStorage(storage, prefix) { // 这里返回一个 Proxy 实例,调用这个实例的 set 或 get 方法来存取数据 return new Proxy({}, { set: (obj, prop, value) => { obj[prop] = value; storage.setItem(`${prefix}.${prop}`, value); }, get: (obj, prop) => { // return obj[prop]; return storage.getItem(`${prefix}.${prop}`); }, }); } // Create an instance of the storage proxy // 使用的时候首先经过 namespace 建立 Storage Proxy 实例 const userObject = getStorage(localStorage, "user"); // Set a value in localStorage // 而后经过直接访问属性的方法来操做数据 userObject.name = "David"; // Get the value from localStorage // 能够方便的使用解构获取数据 const { name } = userObject;
class Storage { constructor(storage, prefix) { this.storage = storage; this.prefix = prefix; } getItem(prop) { return this.storage.getItem(`${this.prefix}.${prop}`); } setItem(prop, val) { return this.storage.setItem(`${this.prefix}.${prop}`, val); } }
使用 class 封装 Storage 经过 new 方法建立实例,并使用 get/setItem 方法操做明显没有 Proxy 封装后使用属性操做符读取数据更方便。this
请关注个人订阅号,不按期推送有关 JS 的技术文章,只谈技术不谈八卦 😊spa