摘要:译使用更好的封装更多前端技术和知识点,搜索订阅号菌订阅看到篇文章觉得不错,原文。讲的是使用来封装,做一层提供存取数据的代理层。这里简单翻译一下这篇文章的主要内容。请关注我的订阅号,不定期推送有关的技术文章,只谈技术不谈八卦
[译]使用 Proxy 更好的封装 Storage API
⭐️ 更多前端技术和知识点,搜索订阅号 JS 菌 订阅封装 Storage看到篇文章觉得不错,原文:https://davidwalsh.name/javas...。讲的是使用 Proxy 来封装 Storage API,做一层提供存取数据的代理层。这里简单翻译一下这篇文章的主要内容。
这篇文章提到 Proxy 这种语法可以用来封装 sessionStorage、 localStorage 甚至是 IndexedDB。可以使用 Proxy 代理来使 API 更容易使用。
首先介绍一下 Proxy 的基本用法:
/* 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 数据的代理:
// 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 封装后使用属性操作符读取数据更方便。
请关注我的订阅号,不定期推送有关 JS 的技术文章,只谈技术不谈八卦
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/106068.html
摘要:此方法充当拦截器,在返回值之前,会首先对属性值进行检查,如果不存在,则抛出异常。输出与第一种情况相同,但此时函数专注于逻辑,只处理消息。在这种情况下,我们需要使用方法,并在其中进行验证。在此示例中,我们不允许空和发布请求而不提供数据。 翻译:刘小夕原文链接:https://devinduct.com/blogpos... 什么是 Proxy 通常,当谈到JavaScript语言时,我...
摘要:随着社区及各大厂商的不断改进发展,将成为容器管理领域的领导者。以集群的方式运行管理跨机器的容器。的自我修复机制使得容器集群总是运行在用户期望的状态。 本文来源于Infoq的一篇文章(见参考部分),并在难懂的地方自己理解的基础上做了修改。实际在ubuntu上部署 kubernetes 操作另见 文章 。 Together we will ensure that Kubernete...
摘要:随着社区及各大厂商的不断改进发展,将成为容器管理领域的领导者。以集群的方式运行管理跨机器的容器。的自我修复机制使得容器集群总是运行在用户期望的状态。 本文来源于Infoq的一篇文章(见参考部分),并在难懂的地方自己理解的基础上做了修改。实际在ubuntu上部署 kubernetes 操作另见 文章 。 Together we will ensure that Kubernete...
摘要:离线存储数据的建议对寻址资源,使用这是的一部分。在到达储量限制之前,两种存储机制都会一直进行存储。则没有对存储量做出限制,只是在之后会弹出提醒。是异步的基于回调函数,但它同样不支持。也是异步的基于回调函数,在和中可以工作虽然使用的是同步。 拖拖拉拉好久,终于把个人博客整出来了。鸣谢 @pinggod。 厚着脸安利一下,地址是 http://www.wemlion.com/。欢迎访问,欢...
阅读 789·2023-04-26 00:37
阅读 671·2021-11-24 09:39
阅读 2099·2021-11-23 09:51
阅读 3657·2021-11-22 15:24
阅读 638·2021-10-19 11:46
阅读 1832·2019-08-30 13:53
阅读 2302·2019-08-29 17:28
阅读 1280·2019-08-29 14:11