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代理。
特性
键名即引用
属性名可以从#开始,这时使用引用执行本次读写,每层属性名之间使用/分隔空指针预防措施
在引用中过程中,非末尾属性为undefined或null时,不会去抛出空指针异常, 而是会自动创建一个空容器,默认创建对象。但如果属性拥有$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常用函数 。