Skip to content

RW

RW方法可以为目标对象创建一个代理,用于开启功能更强大的读写模式。我一般称它为高级读写领域。 在这个领域下,你可以调用我内置的一些读写语法。甚至,你还可以借助这个领域扩展出符合自己需求和喜好的语法。

语法

javascript
RW(target)
RW(target)['#/value']
RW(target)['#/$JSON_jsonStr/value']

RW(target)['#/$Array_arr/0/value']
RW(target)['#/$Array_arr/0'].value
RW(target)['#/$Array_arr/0']['#/value']

RW(target)['#/$Array_arr/$Item_value']
RW(target)['#/$Array_arr/$ItemString_value']

描述

RW方法创建一个Proxy代理对象,允许通过特殊的引用语法访问和修改深层嵌套的对象属性。该方法实现了"键名即引用"的概念,使用#开头的属性名作为引用路径,路径中的每一层使用/分隔。支持多种内置修饰符来处理特定的数据类型和操作,如JSON解析、数组处理等。

参数

target object

  需要创建代理的目标对象。

返回值

Proxy<object>

  RW()将返回一个Proxy代理,并且这个代理每次取值也会返回一个新的RW代理。

特性

  • 键名即引用
      属性名可以从#开始,这时使用引用执行本次读写,每层属性名之间使用/分隔
  • 空指针预防措施
      在引用中过程中,非末尾属性为undefinednull时,不会去抛出空指针异常, 而是会自动创建一个空容器,默认创建对象。但如果属性拥有$Array_修饰符,则创建数组。
  • 修饰词钩子
      在引用中过程中,属性名可以增加$[内置关键词]_前缀修饰。 修饰词在语义上代表属性内的特征,在执行上则包含了一系列数据处理。

注意事项

  • RW()代理本身无法在vue3中被深度监听,需要尽量避免监听代理的情况
  • 如果必须在Vue3中使用深度监听,可以尝试使用shallowRW()
  • 由于使用Proxy对象,不支持IE浏览器
  • 当访问的属性路径中存在null或undefined值时,系统会自动创建对象容器(除非使用$Array_修饰符,此时会创建数组)
  • 支持多种内置修饰符,如$JSON_、$Array_、$Item_、$ItemString_等

示例

基础用法

JSON数据处理

数组操作

浏览器兼容

由于使用Proxy对象,不支持IE浏览器,详细浏览器兼容性参考MDN Proxy 浏览器兼容性

性能考虑

  • 使用Proxy实现代理,性能开销较低
  • 引用路径解析采用迭代方式,避免深层嵌套导致的性能问题
  • 空指针预防机制自动创建对象/数组,减少手动初始化开销
  • 内置修饰符提供便捷的数据处理功能,减少重复代码

相关函数

  • shallowRW - 创建浅层代理,用于需要深度监听的场景
  • deepConvert - 领域JSON解析
  • Chain - 链式操作语法驱动

参考

引用方式参考了JSON Schema 规范中使用$ref引用的部分。

函数设计参考了Excel常用函数