千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 如何覆盖本地存储中的方法

如何覆盖本地存储中的方法

来源:千锋教育
发布人:syq
时间: 2022-09-14 16:27:52 1663144072

  将本地存储与脚本结合使用。我经常想重写以实现某个功能。重写中的方法有哪些?有许多开发人员想要重写方法以实现密钥的过期时间,或者监视密钥的读写。那么,有哪些方法可以重写中的方法。localStorage localStorage localStorage localStorage

1

  1. 直接在本地存储上重写

  许多开发人员喜欢重写的想法,首先保留原始方法,然后直接在localStorage上重写该方法,如下所示。

2

  但是,这种编写方式并不是覆盖该方法,而是向 中添加一个属性。声明方法的 value 属性时,将覆盖本机方法。setItem() setItemlocalStorage setItem()

  我没有对它进行太多测试,但是在某些浏览器中,此属性将被忽略并导致我们的重写失败。

  2. 覆盖localStorage.__proto__的方法

  如果我们仔细观察,设置项和获取项是从存储伪属性继承的。__proto__

3

 

  然后我们直接覆盖上述方法。localStorage.__proto__

4

  这将实现该方法的实际重写。setItem()

  但这里仍然存在一个问题。两者均从存储继承。在 上重写属性或方法后,中的方法也会被重写。localStoragesessionStoragelocalStorage.__proto__sessionStorage

5

  3. 外包装层

  我们不直接修改方法本身,而是在外面包一层,然后用来实现底层的存储功能。localStorage localStorage

6

  这样,自由度相对较高,并且在第1节中没有兼容性问题。只有使用的名称已更改,并且 中的属性和方法被完全阻止。localStorage

  如果要使用没有包的自定义对象,则需要实现所有属性和方法。不可能像上面这样单独嘲笑一种方法。

  4. 覆盖本地存储

  使用 或等效于完全覆盖变量。比第3节更好,因为名称没有改变。Object.definePropertyProxylocalStorage

  4.1 直接覆盖,无效果

  如果用以下方法直接覆盖,将无效果。

8

  我们通过 获得 的属性描述符。可以发现没有可写的:true属性,这意味着它不是直接可写的。localStorage Object.getOwnPropertyDescriptor localStorage

  4.2 覆盖对象.定义属性

  由于没有属性,我们将向其添加一个属性。我们可以用覆盖 。writable localStorage Object.defineProperty

9

  但是你不能使用上面的写作方法与外面的一层。如果你直接给出上面的内容,那么它将产生无限的递归(为了避免误导,错误的写作方法不会在这里写)。myLocalStorage localStorage

  我已经在这里做了一个备份。如果您需要本机方法,那么您也可以操作它。localStorage

  5. 总结

  在本文中,我们没有专门实现诸如设置过期时间之类的功能。但是从另一个角度谈谈如何重写或其中的方法。localStorage

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT
开班信息
北京校区
  • 北京校区
  • 大连校区
  • 广州校区
  • 成都校区
  • 杭州校区
  • 长沙校区
  • 合肥校区
  • 南京校区
  • 上海校区
  • 深圳校区
  • 武汉校区
  • 郑州校区
  • 西安校区
  • 青岛校区
  • 重庆校区
  • 太原校区
  • 沈阳校区
  • 南昌校区
  • 哈尔滨校区