前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[译]使用 Proxy 更好的封装 Storage API

[译]使用 Proxy 更好的封装 Storage API

作者头像
JS菌
发布2019-07-30 10:09:54
4940
发布2019-07-30 10:09:54
举报
文章被收录于专栏:JS菌JS菌

[译]使用 Proxy 更好的封装 Storage API

⭐️ 更多前端技术和知识点,搜索订阅号 JS 菌 订阅 看到篇文章觉得不错,原文:https://davidwalsh.name/javascript-proxy-with-storage。讲的是使用 Proxy 来封装 Storage API,做一层提供存取数据的代理层。这里简单翻译一下这篇文章的主要内容。

封装 Storage

这篇文章提到 Proxy 这种语法可以用来封装 sessionStorage、 localStorage 甚至是 IndexedDB。可以使用 Proxy 代理来使 API 更容易使用。

首先介绍一下 Proxy 的基本用法:

代码语言:javascript
复制
/*
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 数据的代理:

代码语言:javascript
复制
// 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;

补充

代码语言:javascript
复制
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 封装后使用属性操作符读取数据更方便。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JS菌 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • [译]使用 Proxy 更好的封装 Storage API
    • 封装 Storage
      • 补充
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档