全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

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

发布时间:2022-09-14 16:27:52
发布人:syq

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

相关文章

抖店平台商户被退店还能退货吗?如何提高评分?

2023-09-19

抖店入驻收费多少?开抖店费用是多少?

2023-09-19

想做直播带货的货源哪里来?怎么找货源?

2023-09-19

抖店没有营业执照怎么办?类型有哪些?

2023-09-19

女孩子拍什么最容易火?拍视频怎么赚钱的?

2023-09-19

怎样投抖加不花钱,有哪些技巧?

2023-09-19
在线咨询 免费试学 教程领取